1 个不稳定版本
| 0.2.0 | 2022年5月20日 | 
|---|
#2860 in Rust 模式
14KB
320 代码行
rustructure 支持在运行时遍历指定的 Rust 类型。
这允许从消费外部类型(这些类型可以为消费做好准备)的库的角度进行一定程度的内省。一个激励性的例子是在生成序列化或反序列化代码时,作为 serde 的补充,当格式需要在没有实际类型实例的情况下了解类型时。
此包 可以 通过移除默认的 std 功能成为 no_std,尽管在没有至少 alloc 的情况下,它的实用性可能有限,直到 泛型关联类型 稳定。
此库的主要功能是 Walkable trait/derive 宏和 Walker trait。一个简单的 Walker 示例,它生成数据类型的 S-表达式类似表示,作为 StringWalker(在 no_std 中不可用)包含在内。
use rustructure::Walkable;
#[derive(Walkable)]
struct ExampleStruct<'l> {
    a: Option<u8>,
    b: &'l str,
    c: (u64, String)
}
assert_eq!(
    rustructure::StringWalker::walk::<ExampleStruct>(),
    "(struct:ExampleStruct \
        (field:a (option integer)) \
        (field:b str) \
        (field:c (tuple \
            (field:0 integer) \
            (field:1 str)\
            )\
        )\
    )".to_string()
);
如果您感兴趣,可以在未发布的 rustructure-test 包(在源仓库 中)中找到库的测试用例(通过 StringWalker)。
依赖项
~1.5MB
~34K SLoC