revision/implementations/
boxes.rs

1use 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}