3 个版本
0.1.2 | 2021 年 10 月 2 日 |
---|---|
0.1.1 | 2020 年 6 月 20 日 |
0.1.0 | 2019 年 11 月 9 日 |
在 编码 中排名 893
每月下载量 807
用于 2 crates
125KB
259 行
Rust 的规范化 JSON 序列化
这是一个尝试符合 OLPC 规范化 JSON 最小规范 的规范化 JSON 序列化器实现。此外,该实现还尝试与 Docker 和 Notary 生态系统中使用的 Go 规范化 JSON 实现 完全兼容。如果您发现序列化结果存在不一致,请提交一个 issue。
示例 - 读取 JSON 文件并打印其规范化表示
let res: serde_json::Value =
serde_json::from_reader(input).expect("cannot deserialize input file");
println!(
"{}",
cjson::to_string(&res).expect("cannot write canonical JSON")
);
注意:此 crate 旨在始终可编译为
wasm32-unknown-unknown
和wasm32-wasi
目标。
构建和贡献
本项目欢迎各种类型的贡献,尤其是额外的测试用例。
构建
$ cargo build
$ cargo test
testdata
目录的结构如下
- 在目录的根目录下是 JSON 文件,其名称由其规范化 JSON 表示的 SHA256 摘要表示,该摘要使用
github.com/docker/go/canonical
包计算。测试用例将使用在序列化后获得的 SHA256 摘要,并与文件名进行比较,预计它们应该是相等的。
要添加新的测试用例,您可以使用 canonjson
二进制文件,这是一个 Go 规范化 JSON 实现的 CLI 包装器
$ go get github.com/technosophos/canonjson
$ canonjson target-file.json | sha256sum
在此阶段,将 target-file.json
重命名为 <computed-SHA256>.json
,并将其移动到 testdata
目录的根目录。
errors
子目录包含有效的 JSON 文件(如果文件不是有效的 JSON 文件,测试将失败),但其中包含规范化 JSON 中不允许的字符,因此尝试在规范化 JSON 中表示它们应产生错误。
最后,scripts/integration.sh
脚本包含了对 main.rs
中 CLI 的非常基础的测试——并将从那里获得的摘要与使用 Go 实现序列化获得的摘要进行比较。理想情况下,我们还会添加更多用于测试的规范 JSON 实现。请注意,您还需要之前使用的 canonjson
二进制文件来执行此脚本。
注释和致谢
- 此实现最初基于在 Rust TUF crate 中使用的规范 JSON 序列化。
依赖项
~0.7–1.4MB
~32K SLoC