Crates.io | serde-avro-bytes |
lib.rs | serde-avro-bytes |
version | 0.2.0 |
source | src |
created_at | 2024-03-27 15:43:43.816288 |
updated_at | 2024-03-28 15:49:26.314561 |
description | Efficiently store Rust idiomatic bytes related types in Avro encoding. |
homepage | |
repository | https://github.com/Akanoa/serde-avro-bytes |
max_upload_size | |
id | 1188127 |
size | 52,342 |
Avro is a binary encoding format which provides a "bytes" type optimized
to store &[u8]
data like.
Unfortunately the apache_avro encodes Vec<u8>
as an array of integers
thus the encoded data are twice bigger than using the 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]
}
This crate provided a set of module to handle idiomatic Rust types and encode its component as "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
: adds support for working with BString
s which are convenient wrappers for partially valid UTF-8 bytes sequences provided by the bst
crate. See examples/bstr.rs
.