#encode-decode #decode #encode #binary #serialization #deserialize

bincode_derive_purplecoin

为bincode实现#[derive(Encode, Decode)]

1个版本 (0个不稳定版本)

2.0.0-rc.12022年10月15日

#138 in #encode-decode


用于bincode-purplecoin

MIT许可证

36KB
638

Bincode-derive

bincode的derivecrate。实现了bincode::Encodebincode::Decode

此crate大致分为两部分

解析

大部分解析都在src/parse/文件夹中完成。这将生成以下类型

  • Attributes,目前未使用
  • Visibility,目前未使用
  • DataType,可以是StructEnum,其名称为解析的数据类型
  • Generics类型的泛型部分,例如struct Foo<'a>
  • GenericConstraints类型的“where”部分

生成

生成代码实现是在src/derive_enum.rssrc/derive_struct.rs中完成的。

这由src/generate中的结构体支持。此模块最显著的特点是

  • StreamBuilder是围绕TokenStream的一个薄且友好的包装器
  • Generator是代码生成器的基本类型。这有一些生成实现的方法
    • ImplFor是一个用于单个impl A for B构造的辅助结构体。在这些函数中可以定义
      • GenerateFnBody 是一个辅助结构体,用于上述 impl 中的单个函数。它是通过回调到 FnBuilder 创建的,该回调有助于设置一些属性。 GenerateFnBody 有一个 stream() 函数,该函数返回用于该函数的 StreamBuilder

有关额外的派生测试,请参阅 ../tests 中的测试用例。

为了测试目的,所有生成的代码都输出到当前的 target 文件夹下,文件名为 <struct/enum name>_Encode.rs<struct/enum name>_Decode.rs。这有助于调试。

依赖关系

~185KB