memlink_protocol/
msgpack.rs1use alloc::format;
7use alloc::vec::Vec;
8
9use crate::emsg::ErrorMessage;
10use crate::error::{ProtocolError, Result};
11use crate::request::Request;
12use crate::response::Response;
13use crate::serializer::Serializer;
14
15#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
16pub struct MessagePackSerializer;
17
18impl MessagePackSerializer {
19 pub const fn new() -> Self {
20 Self
21 }
22}
23
24pub const MSGPACK: MessagePackSerializer = MessagePackSerializer;
25
26impl Serializer for MessagePackSerializer {
27 fn serialize<T: serde::Serialize>(&self, value: &T) -> Result<Vec<u8>> {
28 rmp_serde::to_vec(value).map_err(|e| {
29 ProtocolError::SerializationFailed(format!("MessagePack serialization error: {}", e))
30 })
31 }
32
33 fn deserialize<T: serde::de::DeserializeOwned>(&self, bytes: &[u8]) -> Result<T> {
34 rmp_serde::from_slice(bytes).map_err(|e| {
35 ProtocolError::SerializationFailed(format!(
36 "MessagePack deserialization error: {}",
37 e
38 ))
39 })
40 }
41
42 fn serialize_request(&self, req: &Request) -> Result<Vec<u8>> {
43 self.serialize(req)
44 }
45
46 fn deserialize_request(&self, bytes: &[u8]) -> Result<Request> {
47 self.deserialize(bytes)
48 }
49
50 fn serialize_response(&self, resp: &Response) -> Result<Vec<u8>> {
51 self.serialize(resp)
52 }
53
54 fn deserialize_response(&self, bytes: &[u8]) -> Result<Response> {
55 self.deserialize(bytes)
56 }
57
58 fn serialize_error(&self, err: &ErrorMessage) -> Result<Vec<u8>> {
59 self.serialize(err)
60 }
61
62 fn deserialize_error(&self, bytes: &[u8]) -> Result<ErrorMessage> {
63 self.deserialize(bytes)
64 }
65}
66
67pub fn default_serializer() -> &'static MessagePackSerializer {
68 &MSGPACK
69}