From 753422efbc1fab5f5edc05f80ab84495712752c9 Mon Sep 17 00:00:00 2001 From: timofey <tim@ongoteam.yaconnect.com> Date: Sun, 30 Jul 2023 18:57:42 +0000 Subject: [PATCH] move `ParseModeExt` to `mode` --- src/mode.rs | 70 ++++++++++++++++++++++++++++++++++++++++++++++ src/rcore.rs | 2 +- src/rcore/modes.rs | 70 ---------------------------------------------- 3 files changed, 71 insertions(+), 71 deletions(-) diff --git a/src/mode.rs b/src/mode.rs index de00386..008db44 100644 --- a/src/mode.rs +++ b/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 {} diff --git a/src/rcore.rs b/src/rcore.rs index 0f84819..8201285 100644 --- a/src/rcore.rs +++ b/src/rcore.rs @@ -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; diff --git a/src/rcore/modes.rs b/src/rcore/modes.rs index 8af6f44..6f0ad1f 100644 --- a/src/rcore/modes.rs +++ b/src/rcore/modes.rs @@ -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