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