comprehensive ParseModeExt
This commit is contained in:
parent
9a03e30e16
commit
0b0eeae1ec
@ -125,6 +125,27 @@ pub trait ParseModeExt: ParseMode {
|
||||
<Self::Mode as Mode>::seal(s)
|
||||
}
|
||||
|
||||
/// [`Mode::xmap_err`].
|
||||
fn xmap_err<A, E0, E1>(
|
||||
result: <Self::Mode as Mode>::ExtensionResult<A, E0>,
|
||||
f: impl FnOnce(E0) -> E1,
|
||||
) -> <Self::Mode as Mode>::ExtensionResult<A, E1> {
|
||||
<Self::Mode as Mode>::xmap_err(result, f)
|
||||
}
|
||||
|
||||
/// [`Mode::xbind`].
|
||||
fn xbind<A0, A1, E>(
|
||||
result: <Self::Mode as Mode>::ExtensionResult<A0, E>,
|
||||
f: impl FnOnce(A0) -> Result<A1, E>,
|
||||
) -> <Self::Mode as Mode>::ExtensionResult<A1, E> {
|
||||
<Self::Mode as Mode>::xbind(result, f)
|
||||
}
|
||||
|
||||
/// [`Mode::xseal`].
|
||||
fn xseal<A, E>(result: <Self::Mode as Mode>::ExtensionResult<A, E>) -> Result<A, E> {
|
||||
<Self::Mode as Mode>::xseal(result)
|
||||
}
|
||||
|
||||
/// [`Mode::smap`].
|
||||
fn smap<A0, A1>(
|
||||
source: <Self::Mode as Mode>::ExtensionSource<A0>,
|
||||
@ -132,6 +153,23 @@ pub trait ParseModeExt: ParseMode {
|
||||
) -> <Self::Mode as Mode>::ExtensionSource<A1> {
|
||||
<Self::Mode as Mode>::smap(source, f)
|
||||
}
|
||||
|
||||
/// [`Mode::prepare`].
|
||||
fn prepare<A>(a: A) -> <Self::Mode as Mode>::ExtensionSource<A> {
|
||||
<Self::Mode as Mode>::prepare(a)
|
||||
}
|
||||
|
||||
/// [`Mode::xsbind`].
|
||||
fn xsbind<AB, A, B, E>(
|
||||
ab: <Self::Mode as Mode>::ExtensionSource<AB>,
|
||||
t2ab: impl FnOnce(AB) -> (A, B),
|
||||
ce: impl FnOnce(
|
||||
<Self::Mode as Mode>::ExtensionSource<B>,
|
||||
) -> <Self::Mode as Mode>::ExtensionResult<B, E>,
|
||||
ab2t: impl FnOnce(A, B) -> Result<AB, E>,
|
||||
) -> <Self::Mode as Mode>::ExtensionResult<AB, E> {
|
||||
<Self::Mode as Mode>::xsbind(ab, t2ab, ce, ab2t)
|
||||
}
|
||||
}
|
||||
|
||||
impl<F: ParseMode> ParseModeExt for F {}
|
||||
|
Loading…
Reference in New Issue
Block a user