rcore::inctx

This commit is contained in:
AF 2023-06-30 22:12:47 +00:00
parent f6cc23ff5f
commit e9e7ffb57d
3 changed files with 21 additions and 18 deletions

View File

@ -6,6 +6,7 @@ mod addresses;
mod context; mod context;
mod diagnostic; mod diagnostic;
mod hashing; mod hashing;
mod inctx;
mod inlining; mod inlining;
mod origin; mod origin;
mod point; mod point;
@ -24,6 +25,7 @@ pub use self::addresses::{Addresses, InliningAddresses};
pub use self::context::Context; pub use self::context::Context;
pub use self::diagnostic::Diagnostic; pub use self::diagnostic::Diagnostic;
pub use self::hashing::{Hash, HASH_SIZE, HASH_ZEROS}; pub use self::hashing::{Hash, HASH_SIZE, HASH_ZEROS};
pub use self::inctx::InCtx;
pub use self::inlining::{Inlining, InliningExt}; pub use self::inlining::{Inlining, InliningExt};
pub use self::origin::{OFctr, Origin}; pub use self::origin::{OFctr, Origin};
pub use self::point::Point; pub use self::point::Point;

19
src/rcore/inctx.rs Normal file
View File

@ -0,0 +1,19 @@
use super::*;
pub trait InCtx<'a, Ctx: Context<'a>>: Inlining {
fn icnext_address<E>(self, err: impl FnOnce(&[u8]) -> E) -> Result<(Address, Self), E>;
fn icnext_point<'b, A: Mentionable<'a, Ctx>, E>(
self,
factory: A::Fctr,
err: impl FnOnce(&[u8]) -> E,
) -> Result<(Point<'a, Ctx, A>, Self), E> {
let (point, inctx) = self.icnext_address(err)?;
Ok((
Point::from_address(point, factory, inctx.iresolver()),
inctx,
))
}
fn iresolver(&self) -> Rc<dyn Resolver<'a, Ctx>>;
}

View File

@ -34,24 +34,6 @@ impl<D: ?Sized + Deserializer> Inlining for &mut D {
} }
} }
pub trait InCtx<'a, Ctx: Context<'a>>: Inlining {
fn icnext_address<E>(self, err: impl FnOnce(&[u8]) -> E) -> Result<(Address, Self), E>;
fn icnext_point<'b, A: Mentionable<'a, Ctx>, E>(
self,
factory: A::Fctr,
err: impl FnOnce(&[u8]) -> E,
) -> Result<(Point<'a, Ctx, A>, Self), E> {
let (point, inctx) = self.icnext_address(err)?;
Ok((
Point::from_address(point, factory, inctx.iresolver()),
inctx,
))
}
fn iresolver(&self) -> Rc<dyn Resolver<'a, Ctx>>;
}
impl<'a: 'c, 'c, Ctx: Context<'a>> Inlining for &'c mut dyn DeCtx<'a, Ctx> { impl<'a: 'c, 'c, Ctx: Context<'a>> Inlining for &'c mut dyn DeCtx<'a, Ctx> {
fn iread_n<A, E>( fn iread_n<A, E>(
self, self,