FactoryExt
via FactoryModeParse
This commit is contained in:
parent
3306bf9cc0
commit
53d7a104fc
@ -136,7 +136,7 @@ pub type ParseError<'a, Ctx, F> = <F as FactoryBase<'a, Ctx>>::ParseError;
|
||||
pub type ParseErrorA<'a, Ctx, A> = ParseError<'a, Ctx, Fctr<'a, Ctx, A>>;
|
||||
|
||||
/// Extension trait for factories.
|
||||
pub trait FactoryExt<'a, Ctx: Context<'a>>: FactoryBase<'a, Ctx> {
|
||||
pub trait FactoryExt<'a, Ctx: Context<'a>>: FactoryModeParse<'a, Ctx> {
|
||||
/// Parse the object from a slice.
|
||||
fn parse_slice(
|
||||
&self,
|
||||
|
@ -55,26 +55,26 @@ pub(super) trait InliningAddresses<E>: Stream {
|
||||
|
||||
impl<E, D: ?Sized + Stream> InliningAddresses<E> for D {}
|
||||
|
||||
fn _parse_slice<'a, Ctx: Context<'a>, F: FactoryParse<'a, Ctx>>(
|
||||
fn _parse_slice<'a, Ctx: Context<'a>, F: FactoryModeParse<'a, Ctx>>(
|
||||
factory: &F,
|
||||
slice: &[u8],
|
||||
resolver: &Rc<dyn Resolver<'a, Ctx>>,
|
||||
) -> ParseResult<'a, Ctx, F> {
|
||||
let mut deserializer = SliceDeserializer::from(slice);
|
||||
let mentionable = factory.deserialize(&mut DeCtxT {
|
||||
let mentionable = F::seal(factory.mdeserialize(&mut DeCtxT {
|
||||
deserializer: &mut deserializer,
|
||||
resolver,
|
||||
addresses: &mut Addresses::start(),
|
||||
} as &mut dyn DeCtx<'a, Ctx>)?;
|
||||
} as &mut dyn DeCtx<'a, Ctx>)?);
|
||||
let tail = deserializer.read_all();
|
||||
if tail.is_empty() {
|
||||
Ok(mentionable)
|
||||
} else {
|
||||
factory.extend(mentionable, tail)
|
||||
F::xseal(factory.mextend(F::prepare(mentionable), tail))
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, Ctx: Context<'a>, F: FactoryParse<'a, Ctx>> FactoryExt<'a, Ctx> for F {
|
||||
impl<'a, Ctx: Context<'a>, F: FactoryModeParse<'a, Ctx>> FactoryExt<'a, Ctx> for F {
|
||||
fn parse_slice(
|
||||
&self,
|
||||
slice: &[u8],
|
||||
|
Loading…
Reference in New Issue
Block a user