20 个版本
0.7.1 | 2022 年 4 月 29 日 |
---|---|
0.7.0 | 2022 年 2 月 23 日 |
0.6.7 |
|
0.6.5 | 2021 年 6 月 8 日 |
0.4.2 | 2020 年 11 月 12 日 |
#2 in #canon
79 每月下载量
用于 18 个 crate (17 直接)
28KB
668 行
规范
规范是一个专为梅克尔树构建的专用序列化库,适用于 wasm 环境。
其主要组件是 Canon
特性,该特性指定了类型如何编码到/从字节读取。
这允许您轻松地在不同的 wasm 模块之间传递包含数百万个元素的复杂集合。
标识符
实现 Canon
特性的类型的每个值都与一个 Id
有 1:1 的关系。
let a = 42;
let id = Id::new(&a);
assert_eq!(id.reify().expect("read back"), a);
Repr<T>
是一种智能指针类型,它要么拥有值,要么包含值的加密散列,或者两者兼而有之。这允许您构建递归数据类型,这些类型也可以高效地作为梅克尔树存储和访问。
canonical_derive
为了不手动编写所有这些字节计数代码,规范包含一个 derive-macro 来为您实现它们。
#[derive(Canon, PartialEq, Debug)]
struct A2 {
a: u8,
b: u8,
}
canonical_fuzz
一个基于 arbitrary
crate 构建的简单模糊器。允许您模糊类型,如果选择实现自定义编码,则非常有用。
模糊器还会检查报告的值的长度是否与正在写入的内容正确匹配。
依赖关系
~0.4–6.5MB
~10K SLoC