2个版本
0.2.1 | 2021年10月8日 |
---|---|
0.2.0 | 2021年10月4日 |
#2205 in 编码
45KB
670 行
ssb-bfe-rs
安全Scuttlebutt (SSB)的二进制字段编码 (BFE)。
基于JavaScript参考实现:[ssb-bfe](https://github.com/ssb-ngi-pointer/ssb-bfe)(按照[规范](https://github.com/ssb-ngi-pointer/ssb-binary-field-encodings-spec)编写)。
虽然`encode()
`和`decode()
`是此crate公开的两个主要功能,但各种辅助函数和值也被导出以供公共使用。
编码
编码器期望以JSON形式提供输入,形式为serde_json::Value enum
。编码的值作为`BfeValue
`(由本库提供的自定义`enum
`)返回。
解码
解码器期望以`BfeValue
`(由本库提供的自定义`enum
`)的形式提供输入。解码的值以JSON形式返回,形式为serde_json::Value enum
。
`Deserialize
`和`Serialize
`特质已为`BfeValue
`推导,这意味着如果需要(例如,如果值作为序列化JSON数据的字节数组接收),可以将编码的JSON对象解析为`BfeValue
`类型。请参阅[解析JSON为强类型数据结构](https://docs.serde.rs/serde_json/index.html#parsing-json-as-strongly-typed-data-structures)文档中的示例和进一步说明。
示例
use ssb_bfe_rs;
use serde_json::json;
let value = json!({
"author": "@6CAxOI3f+LUOVrbAl0IemqiS7ATpQvr9Mdw9LC4+Uv0=.bbfeed-v1",
"previous": "%R8heq/tQoxEIPkWf0Kxn1nCm/CsxG2CDpUYnAvdbXY8=.bbmsg-v1"
});
let encoded = ssb_bfe_rs::encode(&value)?;
println!("{:X?}", encoded);
// Object({"author": Buffer([0, 3, E8, 20, 31, 38, 8D, DF, F8, B5, E, 56, B6, C0, 97, 42, 1E, 9A, A8, 92, EC, 4, E9, 42, FA, FD, 31, DC, 3D, 2C, 2E, 3E, 52, FD]), "previous": Buffer([1, 4, 47, C8, 5E, AB, FB, 50, A3, 11, 8, 3E, 45, 9F, D0, AC, 67, D6, 70, A6, FC, 2B, 31, 1B, 60, 83, A5, 46, 27, 2, F7, 5B, 5D, 8F])})
let decoded = ssb_bfe_rs::decode(&encoded_value)?;
println!("{:?}", decoded);
// Object({"author": String("@6CAxOI3f+LUOVrbAl0IemqiS7ATpQvr9Mdw9LC4+Uv0=.bbfeed-v1"), "previous": String("%R8heq/tQoxEIPkWf0Kxn1nCm/CsxG2CDpUYnAvdbXY8=.bbmsg-v1")})
文档
使用`cargo doc
生成并托管此库的Rust文档
git clone [email protected]:ssb-ngi-pointer/ssb-bfe-rs.git
cd ssb-bfe-rs
cargo doc --no-deps --open
许可证
LGPL-3.0。
依赖项
~6–8.5MB
~179K SLoC