Codee

Easy and flexible way of encoding and decoding data into either strings or bytes.
This crate provides generic traits for Encoders and Decoders as well as several
implementations for commonly used (de)serializer crates.
This makes it easily possible to abstract away the serialization and deserialization independent
of the concrete crate used. You can write a function like this:
use codee::{CodecError, Decoder, Encoder};
fn store_value<T, Codec>(value: T) -> Result<(), CodecError<<Codec as Encoder<T>>::Error, <Codec as Decoder<T>>::Error>>
where
Codec: Encoder<T, Encoded = String> + Decoder<T, Encoded = str>,
{
let encoded = Codec::encode(&value).map_err(CodecError::Encode)?;
let decoded = Codec::decode(&encoded).map_err(CodecError::Decode)?;
Ok(())
}
use codee::string::{JsonSerdeCodec, FromToStringCodec};
#[derive(serde::Serialize, serde::Deserialize)]
struct MyStruct {
field: usize,
}
store_value::<i32, FromToStringCodec>(42);
store_value::<MyStruct, JsonSerdeCodec>(MyStruct { field: 42 });