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>>;
|
pub type ParseErrorA<'a, Ctx, A> = ParseError<'a, Ctx, Fctr<'a, Ctx, A>>;
|
||||||
|
|
||||||
/// Extension trait for factories.
|
/// 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.
|
/// Parse the object from a slice.
|
||||||
fn parse_slice(
|
fn parse_slice(
|
||||||
&self,
|
&self,
|
||||||
|
@ -55,26 +55,26 @@ pub(super) trait InliningAddresses<E>: Stream {
|
|||||||
|
|
||||||
impl<E, D: ?Sized + Stream> InliningAddresses<E> for D {}
|
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,
|
factory: &F,
|
||||||
slice: &[u8],
|
slice: &[u8],
|
||||||
resolver: &Rc<dyn Resolver<'a, Ctx>>,
|
resolver: &Rc<dyn Resolver<'a, Ctx>>,
|
||||||
) -> ParseResult<'a, Ctx, F> {
|
) -> ParseResult<'a, Ctx, F> {
|
||||||
let mut deserializer = SliceDeserializer::from(slice);
|
let mut deserializer = SliceDeserializer::from(slice);
|
||||||
let mentionable = factory.deserialize(&mut DeCtxT {
|
let mentionable = F::seal(factory.mdeserialize(&mut DeCtxT {
|
||||||
deserializer: &mut deserializer,
|
deserializer: &mut deserializer,
|
||||||
resolver,
|
resolver,
|
||||||
addresses: &mut Addresses::start(),
|
addresses: &mut Addresses::start(),
|
||||||
} as &mut dyn DeCtx<'a, Ctx>)?;
|
} as &mut dyn DeCtx<'a, Ctx>)?);
|
||||||
let tail = deserializer.read_all();
|
let tail = deserializer.read_all();
|
||||||
if tail.is_empty() {
|
if tail.is_empty() {
|
||||||
Ok(mentionable)
|
Ok(mentionable)
|
||||||
} else {
|
} 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(
|
fn parse_slice(
|
||||||
&self,
|
&self,
|
||||||
slice: &[u8],
|
slice: &[u8],
|
||||||
|
Loading…
Reference in New Issue
Block a user