3个版本
0.0.3 | 2022年11月24日 |
---|---|
0.0.2 | 2022年11月24日 |
0.0.1 | 2022年11月24日 |
#271 in 无标准库
17KB
184 行
fields-iter
一个允许迭代结构体字段、获取它们的名称及其可变/共享引用的crate。
示例
打印所有以"a"开头的字符串字段的值
use fields_iter::{FieldsInspect, FieldsIter};
fn print_starts_with_a(v: &dyn FieldsInspect) {
for (name, value) in FieldsIter::new(v) {
if !name.starts_with('a') { continue };
let Some(value) = value.downcast_ref::<String>() else { continue };
println!("{name}={value}");
}
}
将add_here
字段的值加一
use fields_iter::{FieldsInspect, FieldsIterMut};
let v: &mut dyn FieldsInspect;
let field = FieldsIterMut::new(v)
.find(|&(name, _)| name == "add_here")
.expect("no `add_here` field")
.1
.downcast_mut::<i32>()
.expect("field `add_here` is not of type `i32`");
*field += 1;
# assert_eq!(original.add_here, 1);
lib.rs
:
一个允许检查结构体字段的crate宏。
有关更多信息,请参阅FieldsInspect
上的文档。
无std支持
此crate与无std兼容。
依赖项
~1.5MB
~35K SLoC