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.

Features 🚀

serde_columnar comes with several remarkable features:

How to use

Install

shell cargo add serde_columnar

Or edit your Cargo.toml and add serde_columnar as dependency:

toml [dependencies] serde_columnar = "0.3.0"

Examples

```rust use serdecolumnar::{columnar, frombytes, to_vec};

[columnar(vec, ser, de)] // this struct can be a row of vec-like container

[derive(Clone, PartialEq)]

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 }

[columnar(ser, de)] // derive 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::(&bytes).unwrap();

```

You can find more examples of serde_columnar in examples and tests.

Acknowledgements