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) + } +}