#fields #iterator #struct-fields #field

无std fields-iter

一个允许您检查结构体字段的crate。

3个版本

0.0.3 2022年11月24日
0.0.2 2022年11月24日
0.0.1 2022年11月24日

#271 in 无标准库

MIT 许可证

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