1 个不稳定版本

0.1.0 2020年4月12日

#62#introspection


用于 spectacle

LGPL-3.0

11KB
227

Spectacle

Opt-in Runtime Introspection

Spectacle 递归遍历它被调用的结构体,访问每个结构体字段、枚举变体等。它通过 Any 特性 运作。它还包括描述如何从根对象到达当前位置的访问器和选择器的跟踪。有了这两样东西,就可以轻松找到并访问感兴趣的数据部分。

通常不应首先使用反射工具。然而,在某些情况下,它们是不可或缺的。这个crate的发明是由以下用例激发的:编写一个强类型化的serde编解码器,用于大型、复杂、深度嵌套且未充分指定的JSON数据块。从外部开始编写最外层容器类型没有太多困难。然而,确定某些不常见内部字段适当类型是复杂的,因为有许多示例,深度嵌套。

解决方案是进行反射,特别是访问所有仍然是 serde_json::Value 的值。通过打印每个值的表示,可以找到适当的编码方式。

This is not a crisis, this is an opportunity... for INTROSPECTION!

恐龙漫画 由Ryan North创作

功能

  • Spectacle 特性:对包含字段、变体等的访问者
  • 实现 Spectacle对于 $primitive
  • (默认) 特性门控 impl Spectacle for $collection
  • 特性门控 impl Spectacle for serde_json::Value
  • #[派生(Spectacle)]

依赖项

~1.5MB
~35K SLoC