Serde Avro Bytes
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]
};
}
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>>>,
}
Features
bstr: adds support for working with BStrings which are convenient wrappers for partially valid UTF-8 bytes sequences provided by the bst crate. See examples/bstr.rs.