disintegrate_serde/serde/
messagepack.rs1use rmp_serde;
2use std::marker::PhantomData;
3
4use serde::Deserialize;
5use serde::Serialize;
6
7use super::Error;
8use crate::serde::Deserializer;
9use crate::serde::Serializer;
10
11#[derive(Debug, Clone, Copy)]
13pub struct MessagePack<T>(PhantomData<T>);
14
15impl<T> Default for crate::serde::messagepack::MessagePack<T> {
16 fn default() -> Self {
17 Self(PhantomData)
18 }
19}
20impl<T> Serializer<T> for crate::serde::messagepack::MessagePack<T>
21where
22 T: Serialize,
23{
24 fn serialize(&self, value: T) -> Vec<u8> {
34 rmp_serde::to_vec(&value).expect("MessagePack serialization failed")
35 }
36}
37
38impl<T> Deserializer<T> for crate::serde::messagepack::MessagePack<T>
39where
40 for<'d> T: Deserialize<'d>,
41{
42 fn deserialize(&self, data: Vec<u8>) -> Result<T, Error> {
52 rmp_serde::from_slice(&data).map_err(|e| Error::Deserialization(Box::new(e)))
53 }
54}
55
56#[cfg(test)]
57mod tests {
58 use super::*;
59
60 #[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
61 struct Person {
62 name: String,
63 age: u32,
64 }
65
66 #[test]
67 fn it_serialize_and_deserialize_messagepack_data() {
68 let msgpack_serializer = crate::serde::messagepack::MessagePack::<Person>::default();
69 let person = Person {
70 name: String::from("Some Name"),
71 age: 30,
72 };
73
74 let serialized_data = msgpack_serializer.serialize(person.clone());
75 let deserialized_person = msgpack_serializer.deserialize(serialized_data).unwrap();
76
77 assert_eq!(person, deserialized_person);
78 }
79}