1use crate::deser::{Deser, Result, Tracker};
2use std::rc::Rc;
3use std::sync::Arc;
4
5impl<'a, T: 'a> Deser for &'a T where T: Deser {}
6
7impl<'a, T: 'a> Deser for &'a mut T where T: Deser {}
8
9impl<T> Deser for Box<T>
10where
11 T: Deser,
12{
13 fn deser<'a, 'b>(tracker: &mut Tracker<'a, 'b>) -> Result<Self> {
14 Ok(Box::new(T::deser(tracker)?))
15 }
16}
17
18impl<T> Deser for Rc<T>
19where
20 T: Deser,
21{
22 fn deser<'a, 'b>(tracker: &mut Tracker<'a, 'b>) -> Result<Self> {
23 Ok(Rc::new(T::deser(tracker)?))
24 }
25}
26
27impl<T> Deser for Arc<T>
28where
29 T: Deser,
30{
31 fn deser<'a, 'b>(tracker: &mut Tracker<'a, 'b>) -> Result<Self> {
32 Ok(Arc::new(T::deser(tracker)?))
33 }
34}