Skip to main content

osom_lib_boxed/
serde_impl.rs

1use osom_lib_alloc::traits::Allocator;
2use serde::{Deserialize, Serialize, de};
3
4use super::cbox::CBox;
5
6impl<T, TAllocator: Allocator> Serialize for CBox<T, TAllocator>
7where
8    T: Serialize,
9{
10    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
11    where
12        S: serde::Serializer,
13    {
14        self.as_ref().serialize(serializer)
15    }
16}
17
18impl<'de, T, TAllocator: Allocator + Default> Deserialize<'de> for CBox<T, TAllocator>
19where
20    T: Deserialize<'de>,
21{
22    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
23    where
24        D: serde::Deserializer<'de>,
25    {
26        let value = T::deserialize(deserializer)?;
27        let arc = CBox::new(value).map_err(de::Error::custom)?;
28        Ok(arc)
29    }
30}