#variant #introspection #introspect #run-time #was #spectacle #opt-in

spectacle-impl-tuples

为任意变体实现 spectacle::Introspect

2个不稳定版本

0.2.0 2020年4月12日
0.1.0 2020年4月10日

#6 in #introspect


用于 spectacle

LGPL-3.0

4KB

Spectacle

Opt-in Runtime Introspection

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

通常不应将内省作为首选工具。然而,在某些情况下,它们是必不可少的。这个crate的发明促使:编写一个强类型化的serde编解码器,用于大型、复杂、深度嵌套、未充分指定的JSON块。从外向内工作,可以轻松编写最外层容器的类型。然而,确定某些不常见、内部字段的适当类型很复杂,因为有许多示例,深度嵌套。

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

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

恐龙漫画 by Ryan North

功能

  • Spectacle trait:包含字段、变体等的访问者
  • 实现 Spectacle $原始类型
  • (默认) 功能门控 impl Spectacle for $collection
  • 功能门控 impl Spectacle for serde_json::Value
  • #[派生(Spectacle)]

lib.rs:

不要使用此crate。它仅在spectacle中使用。它只为spectacle做一件事。在其他上下文中可能会破坏。

依赖项

~1.5MB
~33K SLoC