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