radn-rs/src/rcore/dectx.rs

42 lines
1.1 KiB
Rust

use super::*;
pub(super) struct DeCtxT<'a: 'c, 'c, Ctx: Context<'a>> {
pub deserializer: &'c mut dyn Deserializer,
pub resolver: &'c Rc<dyn Resolver<'a, Ctx>>,
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<Address, &[u8]>;
fn resolver(&self) -> Rc<dyn Resolver<'a, Ctx>>;
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<Address, &[u8]> {
self.addresses.next(self.deserializer)
}
fn resolver(&self) -> Rc<dyn Resolver<'a, Ctx>> {
self.resolver.clone()
}
fn ad(&mut self) -> (&mut Addresses, &mut dyn Deserializer) {
(self.addresses, self.deserializer)
}
}