2 releases
0.2.1 | Oct 8, 2021 |
---|---|
0.2.0 | Oct 4, 2021 |
#2205 in Encoding
45KB
670 lines
ssb-bfe-rs
Binary Field Encodings (BFE) for Secure Scuttlebutt (SSB).
Based on the JavaScript reference implementation: ssb-bfe (written according to the specification).
While encode()
and decode()
are the two primary functions exposed by this crate, the various helper functions and values are also exported for public use.
Encode
The encoder expects JSON input in the form of a serde_json::Value enum
. The encoded value is returned
as an BfeValue
(a custom enum
provided by this library).
Decode
The decoder expects input in the form of an BfeValue
(a custom enum
provided by this library). The decoded value is returned as JSON in the form of a serde_json::Value enum
.
Deserialize
and Serialize
traits have been derived for BfeValue
, meaning that encoded JSON objects can be parsed into the BfeValue
type if required (for example, if the value is received as a byte slice of serialized JSON data). See the serde
documentation on Parsing JSON as strongly typed data structures for an example and further explanation.
Example
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")})
Documentation
Use cargo doc
to generate and serve the Rust documentation for this library:
git clone git@github.com:ssb-ngi-pointer/ssb-bfe-rs.git
cd ssb-bfe-rs
cargo doc --no-deps --open
License
LGPL-3.0.
Dependencies
~6–8.5MB
~179K SLoC