diff --git a/src/rcore/addresses.rs b/src/rcore/addresses.rs index 605592c..e9e05b5 100644 --- a/src/rcore/addresses.rs +++ b/src/rcore/addresses.rs @@ -40,8 +40,8 @@ impl Addresses { } } -pub trait InliningAddresses: Inlining { - fn inext_address<E>( +pub trait InliningAddresses<E>: Inlining { + fn inext_address( self, addresses: &mut Addresses, err: impl FnOnce(&[u8]) -> E, @@ -54,9 +54,20 @@ pub trait InliningAddresses: Inlining { addresses.current += 1; Ok((address, deserializer)) } + + fn inext_point<'a, 'b, Ctx: Context<'a>, A: Mentionable<'a, Ctx>>( + self, + addresses: &mut Addresses, + resolver: Rc<dyn Resolver<'a, Ctx>>, + factory: A::Fctr, + err: impl FnOnce(&[u8]) -> E, + ) -> Result<(Point<'a, Ctx, A>, Self), E> { + let (point, deserializer) = self.inext_address(addresses, err)?; + Ok((Point::from_address(point, factory, resolver), deserializer)) + } } -impl<D: Inlining> InliningAddresses for D {} +impl<E, D: Inlining> InliningAddresses<E> for D {} fn _parse_slice<'a, Ctx: Context<'a>, A: Mentionable<'a, Ctx>>( factory: &A::Fctr,