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 <::WithMode as AtomicModeProxy>::pma_extend(atomic, tail) } } - -/// For auto-deriving [`RegularAtomic`] from concrete implementations. -pub trait CRegularAtomic: AtomicBase + ImplMode { - /// Concrete implementation of [`RegularAtomic::ra_deserialize`]. - fn cra_deserialize(stream: impl Stream) -> AParseResult; - /// Concrete implementation of [`RegularAtomic::ra_extend`]. - fn cra_extend(self, tail: &[u8]) -> AParseResult; -} - -/// Mostly same as [`AtomicModeParse`] but requires [`Mode`] to be [`RegularMode`]. -pub trait RegularAtomic: AtomicBase + ParseMode { - /// Same as [`AtomicModeParse::ma_deserialize`]. - fn ra_deserialize(stream: impl Stream) -> AParseResult; - /// Same as [`AtomicModeParse::ma_extend`]. - fn ra_extend(self, tail: &[u8]) -> AParseResult; -} - -impl> RegularAtomic for A { - fn ra_deserialize(stream: impl Stream) -> AParseResult { - A::ma_deserialize(stream) - } - - fn ra_extend(self, tail: &[u8]) -> AParseResult { - A::ma_extend(self, tail) - } -} - -impl AtomicModeProxy for WithMode { - type A = A; - - fn pma_deserialize(stream: I) -> AModeResultM { - A::cra_deserialize(stream) - } - - fn pma_extend(atomic: AExtensionSourceM, tail: &[u8]) -> AExtensionResultM { - 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 { + /// Concrete implementation of [`RegularAtomic::ra_deserialize`]. + fn cra_deserialize(stream: impl Stream) -> AParseResult; + /// Concrete implementation of [`RegularAtomic::ra_extend`]. + fn cra_extend(self, tail: &[u8]) -> AParseResult; +} + +/// Mostly same as [`AtomicModeParse`] but requires [`Mode`] to be [`RegularMode`]. +pub trait RegularAtomic: AtomicBase + ParseMode { + /// Same as [`AtomicModeParse::ma_deserialize`]. + fn ra_deserialize(stream: impl Stream) -> AParseResult; + /// Same as [`AtomicModeParse::ma_extend`]. + fn ra_extend(self, tail: &[u8]) -> AParseResult; +} + +impl> RegularAtomic for A { + fn ra_deserialize(stream: impl Stream) -> AParseResult { + A::ma_deserialize(stream) + } + + fn ra_extend(self, tail: &[u8]) -> AParseResult { + A::ma_extend(self, tail) + } +} + +impl AtomicModeProxy for WithMode { + type A = A; + + fn pma_deserialize(stream: I) -> AModeResultM { + A::cra_deserialize(stream) + } + + fn pma_extend(atomic: AExtensionSourceM, tail: &[u8]) -> AExtensionResultM { + atomic.cra_extend(tail) + } +}