comprehensive ParseModeExt

This commit is contained in:
AF 2023-07-30 14:26:36 +00:00
parent 9a03e30e16
commit 0b0eeae1ec

View File

@ -125,6 +125,27 @@ pub trait ParseModeExt: ParseMode {
<Self::Mode as Mode>::seal(s) <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`]. /// [`Mode::smap`].
fn smap<A0, A1>( fn smap<A0, A1>(
source: <Self::Mode as Mode>::ExtensionSource<A0>, 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>::ExtensionSource<A1> {
<Self::Mode as Mode>::smap(source, f) <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 {} impl<F: ParseMode> ParseModeExt for F {}