#serialization #wasm-module #merkle-tree #ffi #canon #data-structures #database

nightly no-std canonical

为 no_std 环境构建的序列化库,其中您想处理递归数据结构。

20 个版本

0.7.1 2022 年 4 月 29 日
0.7.0 2022 年 2 月 23 日
0.6.7 2022 年 2 月 23 日
0.6.5 2021 年 6 月 8 日
0.4.2 2020 年 11 月 12 日

#2 in #canon

Download history 33/week @ 2024-04-26 22/week @ 2024-05-03 21/week @ 2024-05-10 25/week @ 2024-05-17 20/week @ 2024-05-24 23/week @ 2024-05-31 20/week @ 2024-06-07 24/week @ 2024-06-14 25/week @ 2024-06-21 11/week @ 2024-06-28 6/week @ 2024-07-05 24/week @ 2024-07-12 24/week @ 2024-07-19 21/week @ 2024-07-26 20/week @ 2024-08-02 10/week @ 2024-08-09

79 每月下载量
用于 18 个 crate (17 直接)

MPL-2.0 许可证

28KB
668

规范

Build Status Repository Documentation

规范是一个专为梅克尔树构建的专用序列化库,适用于 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