Crates.io | codee |
lib.rs | codee |
version | 0.2.0 |
source | src |
created_at | 2024-07-07 00:01:26.084866 |
updated_at | 2024-08-23 18:41:56.666884 |
description | Easy and flexible way of encoding and decoding data into either strings or bytes |
homepage | |
repository | https://github.com/Synphonyte/codee |
max_upload_size | |
id | 1294428 |
size | 53,540 |
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 });