osom_lib_boxed/
serde_impl.rs1use 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}