revision/implementations/
boxes.rs1use crate::DeserializeRevisioned;
2use crate::SerializeRevisioned;
3
4use super::super::Error;
5use super::super::Revisioned;
6
7impl<T> SerializeRevisioned for Box<T>
8where
9 T: SerializeRevisioned,
10{
11 #[inline]
12 fn serialize_revisioned<W: std::io::Write>(&self, writer: &mut W) -> Result<(), Error> {
13 self.as_ref().serialize_revisioned(writer)
14 }
15}
16
17impl<T> DeserializeRevisioned for Box<T>
18where
19 T: DeserializeRevisioned,
20{
21 #[inline]
22 fn deserialize_revisioned<R: std::io::Read>(reader: &mut R) -> Result<Self, Error> {
23 Ok(Box::new(T::deserialize_revisioned(reader)?))
24 }
25}
26
27impl<T> Revisioned for Box<T>
28where
29 T: Revisioned,
30{
31 #[inline]
32 fn revision() -> u16 {
33 1
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn test_box() {
43 let val: Box<String> = Box::new(String::from("this is a test"));
44 let mut mem: Vec<u8> = vec![];
45 val.serialize_revisioned(&mut mem).unwrap();
46 #[cfg(not(feature = "fixed-width-encoding"))]
47 assert_eq!(mem.len(), 15);
48 #[cfg(feature = "fixed-width-encoding")]
49 assert_eq!(mem.len(), 22);
50 let out =
51 <Box<String> as DeserializeRevisioned>::deserialize_revisioned(&mut mem.as_slice())
52 .unwrap();
53 assert_eq!(val, out);
54 }
55}