1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
use crate::{ser::Casserole, store::Store};
use std::ops::Deref;

impl<S, T> Casserole<S> for Box<T>
where
    S: Store,
    T: Casserole<S>,
{
    type Target = Box<<T as Casserole<S>>::Target>;

    fn casserole(&self, store: &mut S) -> Result<Self::Target, S::Error> {
        Ok(Box::new(self.deref().casserole(store)?))
    }

    fn decasserole(target: &Self::Target, store: &mut S) -> Result<Self, S::Error> {
        Ok(Box::new(<T as Casserole<S>>::decasserole(
            target.deref(),
            store,
        )?))
    }
}