#codec #serialization #deserialize #data-encoding #utilities

codee

Easy and flexible way of encoding and decoding data into either strings or bytes

5 unstable releases

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

#910 in Encoding

Download history 3351/week @ 2024-10-01 4163/week @ 2024-10-08 3517/week @ 2024-10-15 4341/week @ 2024-10-22 3824/week @ 2024-10-29 4950/week @ 2024-11-05 3081/week @ 2024-11-12 3431/week @ 2024-11-19 4588/week @ 2024-11-26 5433/week @ 2024-12-03 6092/week @ 2024-12-10 5507/week @ 2024-12-17 4843/week @ 2024-12-24 5385/week @ 2024-12-31 9383/week @ 2025-01-07 6539/week @ 2025-01-14

26,890 downloads per month
Used in 75 crates (6 directly)

MIT/Apache

38KB
621 lines

Codee

Crates.io Docs MIT/Apache 2.0 Build Status

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(())
}

// 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
~35K SLoC