Expand description
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
.
Status of this project
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
.
Serialization format support
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
Utilities for migrating data structures
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.
Serializing/Deserializing from a futures::Stream
The transmog-async
crate is a fork of
async-bincode
, altered to support the
Format
trait.
Traits
- A deserializer that borrows data when possible.
- A serialization format.
- A deserializer that does not attempt to borrow data when deserializing.