From 060499a3830d334a9c7fea79334c62fd12acf9f8 Mon Sep 17 00:00:00 2001
From: timofey <tim@ongoteam.yaconnect.com>
Date: Sun, 30 Jul 2023 19:50:57 +0000
Subject: [PATCH] `atomic::regular`

---
 src/atomic.rs         |  3 ++-
 src/atomic/modes.rs   | 38 --------------------------------------
 src/atomic/regular.rs | 39 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 41 insertions(+), 39 deletions(-)
 create mode 100644 src/atomic/regular.rs

diff --git a/src/atomic.rs b/src/atomic.rs
index be4a2d2..2817a32 100644
--- a/src/atomic.rs
+++ b/src/atomic.rs
@@ -1,4 +1,5 @@
 mod modes;
+mod regular;
 
 use std::error::Error;
 
@@ -6,8 +7,8 @@ use crate::mode::*;
 
 pub use self::modes::{
     AExtensionResultM, AExtensionSourceM, AModeResultM, AtomicModeParse, AtomicModeProxy,
-    CRegularAtomic, RegularAtomic,
 };
+pub use self::regular::{CRegularAtomic, RegularAtomic};
 
 /// [`Atomic`] equivalent of [`ParseError`].
 ///
diff --git a/src/atomic/modes.rs b/src/atomic/modes.rs
index a53a01a..6c37d3e 100644
--- a/src/atomic/modes.rs
+++ b/src/atomic/modes.rs
@@ -52,41 +52,3 @@ where
         <<A as WithParseMode>::WithMode as AtomicModeProxy>::pma_extend(atomic, tail)
     }
 }
-
-/// For auto-deriving [`RegularAtomic`] from concrete implementations.
-pub trait CRegularAtomic: AtomicBase + ImplMode<Mode = RegularMode> {
-    /// Concrete implementation of [`RegularAtomic::ra_deserialize`].
-    fn cra_deserialize(stream: impl Stream) -> AParseResult<Self>;
-    /// Concrete implementation of [`RegularAtomic::ra_extend`].
-    fn cra_extend(self, tail: &[u8]) -> AParseResult<Self>;
-}
-
-/// Mostly same as [`AtomicModeParse`] but requires [`Mode`] to be [`RegularMode`].
-pub trait RegularAtomic: AtomicBase + ParseMode<Mode = RegularMode> {
-    /// Same as [`AtomicModeParse::ma_deserialize`].
-    fn ra_deserialize(stream: impl Stream) -> AParseResult<Self>;
-    /// Same as [`AtomicModeParse::ma_extend`].
-    fn ra_extend(self, tail: &[u8]) -> AParseResult<Self>;
-}
-
-impl<A: AtomicModeParse + ParseMode<Mode = RegularMode>> RegularAtomic for A {
-    fn ra_deserialize(stream: impl Stream) -> AParseResult<Self> {
-        A::ma_deserialize(stream)
-    }
-
-    fn ra_extend(self, tail: &[u8]) -> AParseResult<Self> {
-        A::ma_extend(self, tail)
-    }
-}
-
-impl<A: CRegularAtomic> AtomicModeProxy for WithMode<A, RegularMode> {
-    type A = A;
-
-    fn pma_deserialize<I: Stream>(stream: I) -> AModeResultM<Self::A, I> {
-        A::cra_deserialize(stream)
-    }
-
-    fn pma_extend(atomic: AExtensionSourceM<Self::A>, tail: &[u8]) -> AExtensionResultM<Self::A> {
-        atomic.cra_extend(tail)
-    }
-}
diff --git a/src/atomic/regular.rs b/src/atomic/regular.rs
new file mode 100644
index 0000000..ed9720e
--- /dev/null
+++ b/src/atomic/regular.rs
@@ -0,0 +1,39 @@
+use super::*;
+
+/// For auto-deriving [`RegularAtomic`] from concrete implementations.
+pub trait CRegularAtomic: AtomicBase + ImplMode<Mode = RegularMode> {
+    /// Concrete implementation of [`RegularAtomic::ra_deserialize`].
+    fn cra_deserialize(stream: impl Stream) -> AParseResult<Self>;
+    /// Concrete implementation of [`RegularAtomic::ra_extend`].
+    fn cra_extend(self, tail: &[u8]) -> AParseResult<Self>;
+}
+
+/// Mostly same as [`AtomicModeParse`] but requires [`Mode`] to be [`RegularMode`].
+pub trait RegularAtomic: AtomicBase + ParseMode<Mode = RegularMode> {
+    /// Same as [`AtomicModeParse::ma_deserialize`].
+    fn ra_deserialize(stream: impl Stream) -> AParseResult<Self>;
+    /// Same as [`AtomicModeParse::ma_extend`].
+    fn ra_extend(self, tail: &[u8]) -> AParseResult<Self>;
+}
+
+impl<A: AtomicModeParse + ParseMode<Mode = RegularMode>> RegularAtomic for A {
+    fn ra_deserialize(stream: impl Stream) -> AParseResult<Self> {
+        A::ma_deserialize(stream)
+    }
+
+    fn ra_extend(self, tail: &[u8]) -> AParseResult<Self> {
+        A::ma_extend(self, tail)
+    }
+}
+
+impl<A: CRegularAtomic> AtomicModeProxy for WithMode<A, RegularMode> {
+    type A = A;
+
+    fn pma_deserialize<I: Stream>(stream: I) -> AModeResultM<Self::A, I> {
+        A::cra_deserialize(stream)
+    }
+
+    fn pma_extend(atomic: AExtensionSourceM<Self::A>, tail: &[u8]) -> AExtensionResultM<Self::A> {
+        atomic.cra_extend(tail)
+    }
+}