Skip to main content

memlink_protocol/
serializer.rs

1//! Serializer trait for pluggable encoding.
2//!
3//! Defines Serializer trait with methods for serializing/deserializing
4//! Request, Response, and ErrorMessage types.
5
6use alloc::vec::Vec;
7
8use crate::emsg::ErrorMessage;
9use crate::error::Result;
10use crate::request::Request;
11use crate::response::Response;
12
13pub trait Serializer: Send + Sync {
14    fn serialize<T: serde::Serialize>(&self, value: &T) -> Result<Vec<u8>>;
15
16    fn deserialize<T: serde::de::DeserializeOwned>(&self, bytes: &[u8]) -> Result<T>;
17
18    fn serialize_request(&self, req: &Request) -> Result<Vec<u8>>;
19
20    fn deserialize_request(&self, bytes: &[u8]) -> Result<Request>;
21
22    fn serialize_response(&self, resp: &Response) -> Result<Vec<u8>>;
23
24    fn deserialize_response(&self, bytes: &[u8]) -> Result<Response>;
25
26    fn serialize_error(&self, err: &ErrorMessage) -> Result<Vec<u8>>;
27
28    fn deserialize_error(&self, bytes: &[u8]) -> Result<ErrorMessage>;
29}
30
31pub trait MemLinkSerialize: serde::Serialize + serde::de::DeserializeOwned {}
32
33impl<T> MemLinkSerialize for T where T: serde::Serialize + serde::de::DeserializeOwned {}