11个版本

0.0.11 2022年11月29日
0.0.10 2022年11月21日
0.0.9 2022年10月13日
0.0.8 2022年8月16日
0.0.1 2022年3月30日

#46#validator

每月 37 次下载
用于 substrait-validator

Apache-2.0

16KB
293

为substrait-validator提供过程宏crate

此crate定义了一些针对substrait-validator#[derive]宏,特别是为prost-build生成的类型。这是必要的,因为prost-build本身并不为protobuf结构生成任何类似于反射的信息,例如字符串形式的消息类型名称,这是我们希望在解析树中使用的信息。


lib.rs:

substrait-validator-core提供过程宏crate。

这里定义的衍生宏实际上是对prost未提供任何protobuf反射功能的一个丑陋的解决方案。基本上,它们尝试从prost生成的代码(AST)中恢复所需的protobuf消息元数据。如果prost直接通过其自己的特性行提供此类信息,事情将会简单得多,并且不会那么脆弱,但遗憾的是,似乎没有不分支prost就能做到这一点的方法,而反射似乎不是该项目的目标。

除了丑陋之外,这种方法在恢复字段名称时相当脆弱和不精确,这是由于protoc和prost自动执行的多种大小写转换所致。一些已知问题是

  • 消息定义在消息内时恢复的类型名称使用不正确的大小写约定,因为过程宏无法在类型路径中区分包和消息定义作用域。
  • 如果.proto源文件使用各种意外的大小写约定,则类型、字段名称、oneof变体和枚举变体的结果大小写约定将不正确。
  • 当.proto源文件使用Rust中的保留字(尤其是type)来命名字段时,prost将使用原始标识符来表示该名称。这种语法目前不会被从恢复的名称中过滤掉,因此名为type的字段变为r#type。但这可能不是根本问题。

然而,最终,这些名称仅用于诊断消息等。在最坏的情况下,上述不一致可能会让用户感到困惑,但它们不应影响验证器的有效/无效/可能有效的结果,也不会导致编译或运行时错误。

依赖项

~1.5MB
~36K SLoC