Universal data serialization utilities for Rust.
Rust has a vibrant ecosystem chock full of serialization crates. Many crates implement a common set of traits via Serde, but other crates can not or chose not to support Serde.
At the end of the day, however, most serialization formats can be interacted
with in a generic fashion. The Format
trait aims to be the universal
serialization trait for any crate that can serialize from a std::io::Read
and
deserialize from a std::io::Write
.
We are currently at the experimentation phase of creating this ecosystem. All
constructive criticism, format requests, and questions are welcome on Github
Issues. We are looking to
use this crate as a strategy of offering versioned data support in
BonsaiDb as well as customizable
serialization support for Fabruic
.
We accept pull requests for any moderately stable serialization API.
Bincode
viatransmog-bincode
- CBOR via
transmog-cbor
, powered byCiborium
. - JSON via
transmog-json
, powered byserde_json
. Pot
viatransmog-pot
Sometimes a breaking change is unavoidable. Perhaps, you've decided a different
format is better for your situation. Or, you refactored your structure so much
that serde's built-in attributes aren't enough to help.
transmog-versions
to the rescue!
The transmog-versions
crate provides APIs that allow you
to treat your currently stored data as "version 0" and provide the logic for
handling loading each version of data.
Plans to add a derive macro to remove even more boilerplate code is planned.
The transmog-async
crate is a fork of
async-bincode
, altered to support the
Format
trait.
This project, like all projects from Khonsu Labs, are open-source. This repository is available under the MIT License or the Apache License 2.0.
To learn more about contributing, please see CONTRIBUTING.md.