2 个不稳定版本
0.2.0 | 2024 年 3 月 28 日 |
---|---|
0.1.0 | 2024 年 3 月 27 日 |
#1823 in 编码
每月 32 次下载
29KB
747 行
Serde Avro Bytes
Avro 是一种二进制编码格式,它提供了一个针对存储 &[u8]
数据优化的 "bytes" 类型。
不幸的是,apache_avro 将 Vec<u8>
编码为一个整数数组,因此编码数据的大小是使用 bytes
的一半。
#[derive(Serialize)]
struct Record {
data: Vec<u8>
}
fn playground() {
let record = Record {
data: vec![1,2]
};
// data field
// => encoded as in int array : [4,1,1,1,2,0]
// => encoded as bytes : [4,1,2]
}
此 crate 提供了一套模块来处理 Rust 习惯用法类型,并将其组件编码为 "bytes"。
#[derive(Serialize, Deserialize)]
struct Record {
#[serde(with = "serde_avro_bytes::bytes")]
key: Vec<u8>,
#[serde(with = "serde_avro_bytes::bytes::option")]
key2: Option<Vec<u8>>,
#[serde(with = "serde_avro_bytes::hashmap")]
key3: HashMap<Vec<u8>, Vec<u8>>,
#[serde(with = "serde_avro_bytes::btreemap::option")]
key4: Option<BTreeMap<Vec<u8>, Vec<u8>>>,
#[serde(with = "serde_avro_bytes::list")]
key5: Vec<Vec<u8>>,
#[serde(with = "serde_avro_bytes::list::option")]
key6: Option<Vec<Vec<u8>>>,
}
功能
bstr
:添加了对处理BString
的支持,它是bst
crate 提供的部分有效 UTF-8 字节序列的方便包装器。请参阅examples/bstr.rs
。
依赖关系
~4.5–6.5MB
~113K SLoC