use super::*; pub struct InliningMode; impl Mode for InliningMode { type ParseResult = Result<(A, I), E>; type ExtensionResult = E; fn map_err( result: Self::ParseResult, f: impl FnOnce(E0) -> E1, ) -> Self::ParseResult { result.map_err(f) } fn bind( result: Self::ParseResult, f: impl FnOnce(A0) -> Result, ) -> Self::ParseResult { let (a0, i) = result?; let a1 = f(a0)?; Ok((a1, i)) } fn seal(result: Self::ParseResult) -> Result { result.map(|(a, _)| a) } fn xmap_err( result: Self::ExtensionResult, f: impl FnOnce(E0) -> E1, ) -> Self::ExtensionResult { f(result) } fn xbind( result: Self::ExtensionResult, _f: impl FnOnce(A0) -> Result, ) -> Self::ExtensionResult { result } fn xseal(result: Self::ExtensionResult) -> Result { Err(result) } } impl<'a, Ctx: Context<'a>, F: InlineableFactory<'a, Ctx>> FactoryModeProxy<'a, Ctx> for WithMode { type F = F; fn pmdeserialize>(f: &Self::F, inctx: I) -> ParseResultM<'a, Ctx, F, I> { f.ideserialize(inctx) } fn pmextend( f: &F, _mentionable: Mtbl<'a, Ctx, F>, tail: &[u8], ) -> ExtensionResultM<'a, Ctx, F> { f.extension_error(tail) } } impl AtomicProxy for WithMode { type A = A; fn pa_deserialize(inlining: impl Inlining) -> AParseResult { A::a_ideserialize(inlining).seal() } fn pa_extend(_a: Self::A, tail: &[u8]) -> AParseResult { Err(A::a_extension_error(tail)) } }