7 个版本 (4 个破坏性更新)
0.7.0 | 2022年2月23日 |
---|---|
0.6.2 | 2021年5月25日 |
0.6.0 | 2021年3月30日 |
0.5.0 | 2021年1月19日 |
0.2.1 | 2020年10月16日 |
#38 在 #canonical
每月50次 下载
在 canonical 中使用
6MB
720 行
规范
规范是一个针对 Merkle 树和适合 wasm 环境构建的专业化序列化库。
其主要组件是 Canon
trait,它指定了类型如何编码到/从字节读取。
这允许您轻松地在不同的 wasm 模块之间传递包含数百万个元素的复杂集合。
标识符
实现 Canon
trait 的类型的每个值都与一个 Id
有 1:1 的关系。
let a = 42;
let id = Id::new(&a);
assert_eq!(id.reify().expect("read back"), a);
Repr<T>
是一个智能指针类型,要么拥有值,要么包含值的加密散列,或者两者都包含。这允许您构建可以递归数据类型,这些类型也可以有效地作为 Merkle 树存储和访问。
canonical_derive
为了不手动编写所有这些字节计数代码,规范包含一个 derive-macro 来为您实现它们。
#[derive(Canon, PartialEq, Debug)]
struct A2 {
a: u8,
b: u8,
}
canonical_fuzz
在 arbitrary
crate 上构建的一个简单 fuzzer。允许您对类型的 canon 编码进行模糊测试,如果您选择实现自定义编码,这很有帮助。
该 fuzzer 还检查报告的值的长度是否与写入的内容一致。