3 个不稳定版本
0.2.0 | 2022年11月28日 |
---|---|
0.1.4 |
|
0.1.3 | 2022年3月16日 |
0.1.2 | 2021年11月13日 |
#1122 在 编码
576 每月下载次数
在 31 个crate中使用(通过 wasmbus-rpc)
62KB
2K SLoC
minicbor-ser
此仓库为 serde 和 minicbor 提供了简单实现,使其更容易使用。
快速开始
就像使用其他 serde 衍生的库一样
[dependencies]
minicbor-ser = "0.1.*"
- 序列化
use minicbor_ser as cbor;
use serde::Serialize;
fn main(){
#[derive(Debug, Serialize)]
struct TestStruct {
hello: String,
}
let test_struct = TestStruct {
hello: "world".to_string(),
};
let value = cbor::to_vec(&test_struct).unwrap();
assert_eq!(
[0xA1u8, 0x65, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x65, 0x77, 0x6F, 0x72, 0x6C, 0x64],
value.as_slice(),
)
}
- 反序列化
use minicbor_ser as cbor;
use serde::Deserialize;
fn main(){
#[derive(Debug, Deserialize, PartialEq)]
struct TestStruct {
hello: String,
}
let data = [0xA1u8, 0x65, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x65, 0x77, 0x6F, 0x72, 0x6C, 0x64];
let value: TestStruct = cbor::from_slice(&data[..]).unwrap();
assert_eq!(
TestStruct {
hello: "world".to_string(),
},
value,
);
}
默认情况下,结构体将被序列化为 map
,元组将被序列化为 array
。如果您不想将顶层结构体和元组包裹在 map 和数组中,可以使用 to_vec_flat
。反序列化时,应使用 from_slice_flat
。
let expect = [0x01u8, 0x18, 0xff, 0x65, 0x68, 0x65, 0x6c, 0x6c, 0x6f];
let tuple_flatten = (0x01u8, 0xffu8, "hello");
let value = to_vec_flat(&tuple_flatten).unwrap();
assert_eq!(
expet,
value.as_slice(),
)
let data = crate::to_vec_flat(&exp).unwrap();
let value = from_slice_flat(&data).unwrap();
assert_eq!(exp, value);
类型映射表
以下表示 minicbor-ser 将如何映射 Rust 和 CBOR 的类型
- ❌ : 不支持
- ⚠ : 还不完美
Rust | CBOR |
---|---|
无符号整数 | 无符号整数 |
负整数 | 负整数 |
u128 | ❌ |
i128 | ❌ |
&str | 字符串 |
字符串 | 字符串 |
结构体 | 映射(如果 flatten_top 为 false) |
映射 | 映射 |
切片 | 数组(如果 flatten_top 为 false) |
&[u8] | 字节 |
元组 | 数组(如果 flatten_top 为 false) |
Vec | 数组(如果 flatten_top 为 false) |
Vec | 字节 |
新类型变体 | 映射 |
单元变体 | 字符串 |
元组变体 | 数组 |
结构体变体 | 映射 |
无 std
minicbor-ser 的当前 no-std
功能需要 alloc
。如果您的机器不能使用 alloc
,建议您使用 minicbor
附件的 derive
功能。
要启用 no-std
,请使用
[dependencies]
minicbor-ser = { version = "0.1.*", default-features = false }
注意
某些序列化和反序列化的类型可能与 minicbor
的实现方式不同。如果您需要 minicbor
的默认实现,请使用 minicbor_ser::cbor
来访问其 API。
依赖
~2MB
~44K SLoC