move ParseModeExt to mode

This commit is contained in:
AF 2023-07-30 18:57:42 +00:00
parent 1b54cd4ae8
commit 753422efbc
3 changed files with 71 additions and 71 deletions

View File

@ -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 {}

View File

@ -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;

View File

@ -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