atomic::regular
This commit is contained in:
parent
d4460ad880
commit
060499a383
@ -1,4 +1,5 @@
|
|||||||
mod modes;
|
mod modes;
|
||||||
|
mod regular;
|
||||||
|
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
@ -6,8 +7,8 @@ use crate::mode::*;
|
|||||||
|
|
||||||
pub use self::modes::{
|
pub use self::modes::{
|
||||||
AExtensionResultM, AExtensionSourceM, AModeResultM, AtomicModeParse, AtomicModeProxy,
|
AExtensionResultM, AExtensionSourceM, AModeResultM, AtomicModeParse, AtomicModeProxy,
|
||||||
CRegularAtomic, RegularAtomic,
|
|
||||||
};
|
};
|
||||||
|
pub use self::regular::{CRegularAtomic, RegularAtomic};
|
||||||
|
|
||||||
/// [`Atomic`] equivalent of [`ParseError`].
|
/// [`Atomic`] equivalent of [`ParseError`].
|
||||||
///
|
///
|
||||||
|
@ -52,41 +52,3 @@ where
|
|||||||
<<A as WithParseMode>::WithMode as AtomicModeProxy>::pma_extend(atomic, tail)
|
<<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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
39
src/atomic/regular.rs
Normal file
39
src/atomic/regular.rs
Normal file
@ -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)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user