AtomicExt via AtomicModeParse

This commit is contained in:
AF 2023-07-30 22:24:46 +00:00
parent b8f89580aa
commit 3306bf9cc0
3 changed files with 8 additions and 8 deletions

View File

@ -44,7 +44,7 @@ pub trait AtomicBase: 'static + Send + Sync + Send + Clone + Serializable {
/// [`Factory`]: crate::rcore::Factory /// [`Factory`]: crate::rcore::Factory
/// [`MentionableTop::points_typed`]: crate::rcore::MentionableTop::points_typed /// [`MentionableTop::points_typed`]: crate::rcore::MentionableTop::points_typed
/// [`MentionableTop::topology`]: crate::rcore::MentionableTop::topology /// [`MentionableTop::topology`]: crate::rcore::MentionableTop::topology
pub trait Atomic: AtomicModeParse + ParseMode { pub trait Atomic: AtomicModeParse {
/// Static equivalent of [`FactoryParse::deserialize`]. /// Static equivalent of [`FactoryParse::deserialize`].
/// ///
/// [`FactoryParse::deserialize`]: crate::rcore::FactoryParse::deserialize /// [`FactoryParse::deserialize`]: crate::rcore::FactoryParse::deserialize
@ -56,19 +56,19 @@ pub trait Atomic: AtomicModeParse + ParseMode {
fn a_extend(self, tail: &[u8]) -> AParseResult<Self>; fn a_extend(self, tail: &[u8]) -> AParseResult<Self>;
} }
fn _parse_slice<A: Atomic>(slice: &[u8]) -> AParseResult<A> { fn _parse_slice<A: AtomicModeParse>(slice: &[u8]) -> AParseResult<A> {
let mut deserializer = SliceDeserializer::from(slice); let mut deserializer = SliceDeserializer::from(slice);
let atomic = A::a_deserialize(&mut deserializer)?; let atomic = A::seal(A::ma_deserialize(&mut deserializer)?);
let tail = deserializer.read_all(); let tail = deserializer.read_all();
if tail.is_empty() { if tail.is_empty() {
Ok(atomic) Ok(atomic)
} else { } else {
A::a_extend(atomic, tail) A::xseal(A::ma_extend(A::prepare(atomic), tail))
} }
} }
/// Extension trait to provide method-like utilities associated with [Atomic]s. /// Extension trait to provide method-like utilities associated with [Atomic]s.
pub trait AtomicExt: Atomic { pub trait AtomicExt: AtomicModeParse {
/// Static equivalent of [`FactoryExt::parse_slice`]. /// Static equivalent of [`FactoryExt::parse_slice`].
/// ///
/// [`FactoryExt::parse_slice`]: crate::rcore::FactoryExt::parse_slice /// [`FactoryExt::parse_slice`]: crate::rcore::FactoryExt::parse_slice

View File

@ -1,10 +1,10 @@
//! [`Mode`]-based parsing. //! [`Mode`]-based parsing.
//! //!
//! | [`Mode`] | [`Factory`] | [`Atomic`] | //! | [`Mode`] | [`Factory`] | [`Atomic`] |
//! |------------------|---------------------|--------------------| //! |------------------|---------------------|--------------------|
//! | [`RegularMode`] | [`RegularFactory`] | [`RegularAtomic`] | //! | [`RegularMode`] | [`RegularFactory`] | [`RegularAtomic`] |
//! | [`InliningMode`] | [`InliningFactory`] | [`InliningAtomic`] | //! | [`InliningMode`] | [`InliningFactory`] | [`InliningAtomic`] |
//! //!
//! [`Factory`]: crate::rcore::Factory //! [`Factory`]: crate::rcore::Factory
//! [`Atomic`]: crate::atomic::Atomic //! [`Atomic`]: crate::atomic::Atomic
//! [`RegularFactory`]: crate::rcore::RegularFactory //! [`RegularFactory`]: crate::rcore::RegularFactory

View File

@ -1,5 +1,5 @@
//! Standard extensions to [`rcore`]. //! Standard extensions to [`rcore`].
//! //!
//! [`rcore`]: crate::rcore //! [`rcore`]: crate::rcore
pub mod atomic; pub mod atomic;