move ParseModeExt
to mode
This commit is contained in:
parent
1b54cd4ae8
commit
753422efbc
70
src/mode.rs
70
src/mode.rs
@ -121,3 +121,73 @@ pub type ExtensionSourceP<F, A> = ExtensionSource<<F as ParseMode>::Mode, A>;
|
||||
|
||||
/// [`ParseMode`] equivalent of [`ModeResult`].
|
||||
pub type ModeResultP<F, A, E, I> = ModeResult<<F as ParseMode>::Mode, A, E, I>;
|
||||
|
||||
/// Extension trait for all [`ParseMode`] types, re-exporting [`Mode`] traits.
|
||||
pub trait ParseModeExt: ParseMode {
|
||||
/// [`Mode::bind`].
|
||||
fn bind<A0, A1, E, I>(
|
||||
s: ParseSuccessP<Self, A0, I>,
|
||||
f: impl FnOnce(A0) -> Result<A1, E>,
|
||||
) -> ModeResultP<Self, A1, E, I> {
|
||||
<Self::Mode as Mode>::bind(s, f)
|
||||
}
|
||||
|
||||
/// [`Mode::map`].
|
||||
fn map<A0, A1, I>(
|
||||
s: ParseSuccessP<Self, A0, I>,
|
||||
f: impl FnOnce(A0) -> A1,
|
||||
) -> ParseSuccessP<Self, A1, I> {
|
||||
<Self::Mode as Mode>::map(s, f)
|
||||
}
|
||||
|
||||
/// [`Mode::seal`].
|
||||
fn seal<A, I>(s: ParseSuccessP<Self, A, I>) -> A {
|
||||
<Self::Mode as Mode>::seal(s)
|
||||
}
|
||||
|
||||
/// [`Mode::xmap_err`].
|
||||
fn xmap_err<A, E0, E1>(
|
||||
result: ExtensionResultP<Self, A, E0>,
|
||||
f: impl FnOnce(E0) -> E1,
|
||||
) -> ExtensionResultP<Self, A, E1> {
|
||||
<Self::Mode as Mode>::xmap_err(result, f)
|
||||
}
|
||||
|
||||
/// [`Mode::xbind`].
|
||||
fn xbind<A0, A1, E>(
|
||||
result: ExtensionResultP<Self, A0, E>,
|
||||
f: impl FnOnce(A0) -> Result<A1, E>,
|
||||
) -> ExtensionResultP<Self, A1, E> {
|
||||
<Self::Mode as Mode>::xbind(result, f)
|
||||
}
|
||||
|
||||
/// [`Mode::xseal`].
|
||||
fn xseal<A, E>(result: ExtensionResultP<Self, A, E>) -> Result<A, E> {
|
||||
<Self::Mode as Mode>::xseal(result)
|
||||
}
|
||||
|
||||
/// [`Mode::smap`].
|
||||
fn smap<A0, A1>(
|
||||
source: ExtensionSourceP<Self, A0>,
|
||||
f: impl FnOnce(A0) -> A1,
|
||||
) -> ExtensionSourceP<Self, A1> {
|
||||
<Self::Mode as Mode>::smap(source, f)
|
||||
}
|
||||
|
||||
/// [`Mode::prepare`].
|
||||
fn prepare<A>(a: A) -> ExtensionSourceP<Self, A> {
|
||||
<Self::Mode as Mode>::prepare(a)
|
||||
}
|
||||
|
||||
/// [`Mode::xsbind`].
|
||||
fn xsbind<AB, A, B, E>(
|
||||
ab: ExtensionSourceP<Self, AB>,
|
||||
t2ab: impl FnOnce(AB) -> (A, B),
|
||||
ce: impl FnOnce(ExtensionSourceP<Self, B>) -> ExtensionResultP<Self, B, E>,
|
||||
ab2t: impl FnOnce(A, B) -> Result<AB, E>,
|
||||
) -> ExtensionResultP<Self, AB, E> {
|
||||
<Self::Mode as Mode>::xsbind(ab, t2ab, ce, ab2t)
|
||||
}
|
||||
}
|
||||
|
||||
impl<F: ParseMode> ParseModeExt for F {}
|
||||
|
@ -35,7 +35,7 @@ pub use self::inctx::InCtx;
|
||||
pub use self::inlining::{Inlining, InliningExt, InliningResultExt};
|
||||
pub use self::modes::{
|
||||
CRegularFactory, ExtensionResultM, ExtensionSourceM, FactoryModeParse, FactoryModeProxy,
|
||||
ImplMode, ModeResultM, ParseModeExt, RegularFactory, RegularMode, WithMode, WithParseMode,
|
||||
ImplMode, ModeResultM, RegularFactory, RegularMode, WithMode, WithParseMode,
|
||||
};
|
||||
pub use self::origin::{OFctr, Origin};
|
||||
pub use self::point::Point;
|
||||
|
@ -2,76 +2,6 @@ use std::marker::PhantomData;
|
||||
|
||||
use super::*;
|
||||
|
||||
/// Extension trait for all [`ParseMode`] types, re-exporting [`Mode`] traits.
|
||||
pub trait ParseModeExt: ParseMode {
|
||||
/// [`Mode::bind`].
|
||||
fn bind<A0, A1, E, I>(
|
||||
s: ParseSuccessP<Self, A0, I>,
|
||||
f: impl FnOnce(A0) -> Result<A1, E>,
|
||||
) -> ModeResultP<Self, A1, E, I> {
|
||||
<Self::Mode as Mode>::bind(s, f)
|
||||
}
|
||||
|
||||
/// [`Mode::map`].
|
||||
fn map<A0, A1, I>(
|
||||
s: ParseSuccessP<Self, A0, I>,
|
||||
f: impl FnOnce(A0) -> A1,
|
||||
) -> ParseSuccessP<Self, A1, I> {
|
||||
<Self::Mode as Mode>::map(s, f)
|
||||
}
|
||||
|
||||
/// [`Mode::seal`].
|
||||
fn seal<A, I>(s: ParseSuccessP<Self, A, I>) -> A {
|
||||
<Self::Mode as Mode>::seal(s)
|
||||
}
|
||||
|
||||
/// [`Mode::xmap_err`].
|
||||
fn xmap_err<A, E0, E1>(
|
||||
result: ExtensionResultP<Self, A, E0>,
|
||||
f: impl FnOnce(E0) -> E1,
|
||||
) -> ExtensionResultP<Self, A, E1> {
|
||||
<Self::Mode as Mode>::xmap_err(result, f)
|
||||
}
|
||||
|
||||
/// [`Mode::xbind`].
|
||||
fn xbind<A0, A1, E>(
|
||||
result: ExtensionResultP<Self, A0, E>,
|
||||
f: impl FnOnce(A0) -> Result<A1, E>,
|
||||
) -> ExtensionResultP<Self, A1, E> {
|
||||
<Self::Mode as Mode>::xbind(result, f)
|
||||
}
|
||||
|
||||
/// [`Mode::xseal`].
|
||||
fn xseal<A, E>(result: ExtensionResultP<Self, A, E>) -> Result<A, E> {
|
||||
<Self::Mode as Mode>::xseal(result)
|
||||
}
|
||||
|
||||
/// [`Mode::smap`].
|
||||
fn smap<A0, A1>(
|
||||
source: ExtensionSourceP<Self, A0>,
|
||||
f: impl FnOnce(A0) -> A1,
|
||||
) -> ExtensionSourceP<Self, A1> {
|
||||
<Self::Mode as Mode>::smap(source, f)
|
||||
}
|
||||
|
||||
/// [`Mode::prepare`].
|
||||
fn prepare<A>(a: A) -> ExtensionSourceP<Self, A> {
|
||||
<Self::Mode as Mode>::prepare(a)
|
||||
}
|
||||
|
||||
/// [`Mode::xsbind`].
|
||||
fn xsbind<AB, A, B, E>(
|
||||
ab: ExtensionSourceP<Self, AB>,
|
||||
t2ab: impl FnOnce(AB) -> (A, B),
|
||||
ce: impl FnOnce(ExtensionSourceP<Self, B>) -> ExtensionResultP<Self, B, E>,
|
||||
ab2t: impl FnOnce(A, B) -> Result<AB, E>,
|
||||
) -> ExtensionResultP<Self, AB, E> {
|
||||
<Self::Mode as Mode>::xsbind(ab, t2ab, ce, ab2t)
|
||||
}
|
||||
}
|
||||
|
||||
impl<F: ParseMode> ParseModeExt for F {}
|
||||
|
||||
/// For auto-implementing [`FactoryParse`] and [`Atomic`].
|
||||
///
|
||||
/// [`Atomic`]: crate::rstd::atomic::Atomic
|
||||
|
Loading…
Reference in New Issue
Block a user