42 lines
1.1 KiB
Rust
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)
|
|
}
|
|
}
|