Skip to main content

memlink_msdk/
serialize.rs

1//! Serialization interface for memlink modules.
2//!
3//! Provides the Serializer trait and BincodeSerializer implementation for
4//! efficient IPC communication using MessagePack serialization.
5
6use serde::Serialize;
7
8use crate::error::{ModuleError, Result};
9
10pub trait Serializer: Send + Sync {
11    fn serialize<T: Serialize>(&self, value: &T) -> Result<Vec<u8>>;
12    fn deserialize<T: DeserializeOwned>(&self, bytes: &[u8]) -> Result<T>;
13}
14
15pub use serde::de::DeserializeOwned;
16
17#[derive(Debug, Clone, Copy)]
18pub struct BincodeSerializer;
19
20impl Serializer for BincodeSerializer {
21    fn serialize<T: Serialize>(&self, value: &T) -> Result<Vec<u8>> {
22        rmp_serde::to_vec(value).map_err(ModuleError::from)
23    }
24
25    fn deserialize<T: DeserializeOwned>(&self, bytes: &[u8]) -> Result<T> {
26        rmp_serde::from_slice(bytes).map_err(ModuleError::from)
27    }
28}
29
30pub fn default_serializer() -> BincodeSerializer {
31    BincodeSerializer
32}