#二进制编码 #ssb #scuttlebutt #二进制 #安全scuttlebutt #bfe

ssb-bfe-rs

安全Scuttlebutt (SSB)的二进制字段编码 (BFE)

2个版本

0.2.1 2021年10月8日
0.2.0 2021年10月4日

#2205 in 编码

LGPL-3.0

45KB
670

ssb-bfe-rs

安全Scuttlebutt (SSB)的二进制字段编码 (BFE)。

ssb-bfe-rs crate

基于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