use super::*; pub(super) struct DeCtxT<'a: 'c, 'c, Ctx: Context<'a>> { pub deserializer: &'c mut dyn Deserializer, pub resolver: &'c Rc>, pub addresses: &'c mut Addresses, } pub(super) trait DeCtx<'a, Ctx: Context<'a>> { fn deserializer(&mut self) -> &mut dyn Deserializer; fn tell(&self) -> usize; fn next_address(&mut self) -> Result; fn resolver(&self) -> Rc>; fn ad(&mut self) -> (&mut Addresses, &mut dyn Deserializer); } impl<'a: 'c, 'c, Ctx: Context<'a>> DeCtx<'a, Ctx> for DeCtxT<'a, 'c, Ctx> { fn deserializer(&mut self) -> &mut dyn Deserializer { self.deserializer } fn tell(&self) -> usize { self.deserializer.tell() } fn next_address(&mut self) -> Result { self.addresses.next(self.deserializer) } fn resolver(&self) -> Rc> { self.resolver.clone() } fn ad(&mut self) -> (&mut Addresses, &mut dyn Deserializer) { (self.addresses, self.deserializer) } }