serde_columnar
serde_columnar
is an ergonomic columnar storage encoding crate that offers forward and backward compatibility.
It allows the contents that need to be serialized and deserialized to be encoded into binary using columnar storage, all by just employing simple macro annotations.
For more detailed introduction, please refer to this Notion
link: Serde-Columnar.
serde_columnar
comes with several remarkable features:
shell
cargo add serde_columnar
Or edit your Cargo.toml
and add serde_columnar
as dependency:
toml
[dependencies]
serde_columnar = "0.3.0"
```rust use serdecolumnar::{columnar, frombytes, to_vec};
struct Data {
name: String,
#[columnar(strategy = "DeltaRle")] // this field will be encoded by DeltaRle
id: u64,
#[columnar(strategy = "Rle")] // this field will be encoded by Rle
gender: String,
#[columnar(strategy = "BoolRle")] // this field will be encoded by BoolRle
married: bool
#[columnar(optional, index = 0)] // This field is optional, which means that this field can be added in this version or deleted in a future version
future: String
}
Serialize
and Deserialize
struct VecStore { #[columnar(class = "vec")] // this field is a vec-like table container pub data: Vec, #[columnar(optional, index = 0)] // table container also supports optional field pub other_data: u64 }
let store = VecStore::new(...);
let bytes = serdecolumnar::tovec(&store).unwrap();
let storefrombytes = serdecolumnar::frombytes::
```
You can find more examples of serde_columnar
in examples
and tests
.