codee/binary/
bincode_serde.rs1use crate::{Decoder, Encoder};
2use bincode_v1 as bincode;
3
4pub struct BincodeSerdeCodec;
8
9impl<T: serde::Serialize> Encoder<T> for BincodeSerdeCodec {
10 type Error = bincode::Error;
11 type Encoded = Vec<u8>;
12
13 fn encode(val: &T) -> Result<Self::Encoded, Self::Error> {
14 bincode::serialize(val)
15 }
16}
17
18impl<T: serde::de::DeserializeOwned> Decoder<T> for BincodeSerdeCodec {
19 type Error = bincode::Error;
20 type Encoded = [u8];
21
22 fn decode(val: &Self::Encoded) -> Result<T, Self::Error> {
23 bincode::deserialize(val)
24 }
25}
26
27#[cfg(test)]
28mod tests {
29 use super::*;
30
31 #[test]
32 fn test_bincode_codec() {
33 #[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
34 struct Test {
35 s: String,
36 i: i32,
37 }
38 let t = Test {
39 s: String::from("party time 🎉"),
40 i: 42,
41 };
42 let enc = BincodeSerdeCodec::encode(&t).unwrap();
43 let dec: Test = BincodeSerdeCodec::decode(&enc).unwrap();
44 assert_eq!(dec, t);
45 }
46}