1pub struct BincodeCodec;
10
11impl<T: bincode::Encode> crate::Encoder<T> for BincodeCodec {
12 type Error = bincode::error::EncodeError;
13 type Encoded = Vec<u8>;
14
15 fn encode(val: &T) -> Result<Self::Encoded, Self::Error> {
16 bincode::encode_to_vec(val, bincode::config::standard())
17 }
18}
19
20impl<T: for<'a> bincode::de::BorrowDecode<'a, ()>> crate::Decoder<T> for BincodeCodec {
21 type Error = bincode::error::DecodeError;
22 type Encoded = [u8];
23
24 fn decode(val: &Self::Encoded) -> Result<T, Self::Error> {
25 let (data, _bytes_read) =
26 bincode::borrow_decode_from_slice(val, bincode::config::standard())?;
27 Ok(data)
28 }
29}
30
31#[cfg(test)]
32mod tests {
33 use crate::{Decoder, Encoder};
34
35 use super::*;
36
37 #[test]
38 fn test_bincode_codec() {
39 #[derive(Clone, Debug, PartialEq, bincode::Encode, bincode::Decode)]
40 struct Test {
41 s: String,
42 i: i32,
43 }
44 let t = Test {
45 s: String::from("party time 🎉"),
46 i: 42,
47 };
48 let enc = BincodeCodec::encode(&t).unwrap();
49 let dec: Test = BincodeCodec::decode(&enc).unwrap();
50 assert_eq!(dec, t);
51 }
52}