Mode::seal

This commit is contained in:
AF 2023-07-29 18:33:40 +00:00
parent 5dff836c58
commit 4a762dd00f
2 changed files with 10 additions and 0 deletions

View File

@ -14,6 +14,8 @@ pub trait Mode {
result: Self::ParseResult<A0, E, I>, result: Self::ParseResult<A0, E, I>,
f: impl FnOnce(A0) -> Result<A1, E>, f: impl FnOnce(A0) -> Result<A1, E>,
) -> Self::ParseResult<A1, E, I>; ) -> Self::ParseResult<A1, E, I>;
fn seal<A, E, I>(result: Self::ParseResult<A, E, I>) -> Result<A, E>;
} }
pub trait ParseMode { pub trait ParseMode {
@ -79,6 +81,10 @@ impl Mode for RegularMode {
) -> Self::ParseResult<A1, E, I> { ) -> Self::ParseResult<A1, E, I> {
result.and_then(f) result.and_then(f)
} }
fn seal<A, E, I>(result: Self::ParseResult<A, E, I>) -> Result<A, E> {
result
}
} }
pub trait RegularFactory<'a, Ctx: Context<'a>>: pub trait RegularFactory<'a, Ctx: Context<'a>>:

View File

@ -20,6 +20,10 @@ impl Mode for InliningMode {
let a1 = f(a0)?; let a1 = f(a0)?;
Ok((a1, i)) Ok((a1, i))
} }
fn seal<A, E, I>(result: Self::ParseResult<A, E, I>) -> Result<A, E> {
result.map(|(a, _)| a)
}
} }
impl<'a, Ctx: Context<'a>, F: InlineableFactory<'a, Ctx>> FactoryProxy<'a, Ctx> impl<'a, Ctx: Context<'a>, F: InlineableFactory<'a, Ctx>> FactoryProxy<'a, Ctx>