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