5 unstable releases
new 0.3.0 | Jan 10, 2025 |
---|---|
0.2.0 | Aug 23, 2024 |
0.1.2 | Jul 8, 2024 |
0.1.1 | Jul 7, 2024 |
0.1.0 | Jul 7, 2024 |
#867 in Encoding
22,810 downloads per month
Used in 59 crates
(6 directly)
38KB
621 lines
Codee
Easy and flexible way of encoding and decoding data into either strings or bytes.
This crate provides generic traits for Encoder
s and Decoder
s 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(())
}
// Then we can use it like this:
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 });
Dependencies
~0.2–1.6MB
~34K SLoC