move Atomic to atomic

This commit is contained in:
AF 2023-07-30 19:40:13 +00:00
parent 7a6765b80e
commit ba402b62b5
4 changed files with 41 additions and 24 deletions

View File

@ -1 +1,38 @@
use std::error::Error;
use crate::mode::*;
/// [`Atomic`] equivalent of [`ParseError`].
///
/// [`ParseError`]: crate::rcore::ParseError
pub type AParseError<A> = <A as AtomicBase>::AParseError;
pub type AParseResult<A> = Result<A, AParseError<A>>;
/// [`Atomic`] base.
pub trait AtomicBase: 'static + Send + Sync + Send + Clone + Serializable {
/// Equivalent of [`FactoryBase::ParseError`].
///
/// [`FactoryBase::ParseError`]: crate::rcore::FactoryBase::ParseError
type AParseError: Error;
}
/// This trait combines functionality of [`Mentionable`] and [`Factory`],
/// while limiting [`MentionableTop::points_typed`] (and corresponding [`MentionableTop::topology`])
/// to an empty sequence.
///
/// [`Mentionable`]: crate::rcore::Mentionable
/// [`Factory`]: crate::rcore::Factory
/// [`MentionableTop::points_typed`]: crate::rcore::MentionableTop::points_typed
/// [`MentionableTop::topology`]: crate::rcore::MentionableTop::topology
pub trait Atomic: AtomicBase + ParseMode {
/// Static equivalent of [`FactoryParse::deserialize`].
///
/// [`FactoryParse::deserialize`]: crate::rcore::FactoryParse::deserialize
fn a_deserialize(stream: impl Stream) -> AParseResult<Self>;
/// Static equivalent of [`FactoryParse::extend`].
///
/// [`FactoryParse::extend`]: crate::rcore::FactoryParse::extend
fn a_extend(self, tail: &[u8]) -> AParseResult<Self>;
}

View File

@ -205,7 +205,7 @@ impl<F: ParseMode> ParseModeExt for F {}
/// For auto-implementing [`FactoryParse`] and [`Atomic`]. /// For auto-implementing [`FactoryParse`] and [`Atomic`].
/// ///
/// [`FactoryParse`]: crate::rcore::FactoryParse /// [`FactoryParse`]: crate::rcore::FactoryParse
/// [`Atomic`]: crate::rstd::atomic::Atomic /// [`Atomic`]: crate::atomic::Atomic
pub trait ImplMode { pub trait ImplMode {
/// Same as [`ParseMode::Mode`] /// Same as [`ParseMode::Mode`]
type Mode: ?Sized + Mode; type Mode: ?Sized + Mode;
@ -214,7 +214,7 @@ pub trait ImplMode {
/// Used with [`WithMode`] for linking [`ImplMode`] to [`FactoryParse`] and [`Atomic`]. /// Used with [`WithMode`] for linking [`ImplMode`] to [`FactoryParse`] and [`Atomic`].
/// ///
/// [`FactoryParse`]: crate::rcore::FactoryParse /// [`FactoryParse`]: crate::rcore::FactoryParse
/// [`Atomic`]: crate::rstd::atomic::Atomic /// [`Atomic`]: crate::atomic::Atomic
pub trait WithParseMode: ImplMode { pub trait WithParseMode: ImplMode {
/// [`WithMode`] implementing [`FactoryModeProxy`] or [`AtomicModeProxy`]. /// [`WithMode`] implementing [`FactoryModeProxy`] or [`AtomicModeProxy`].
/// ///

View File

@ -10,7 +10,7 @@ pub mod plain;
use std::marker::PhantomData; use std::marker::PhantomData;
use crate::mode::*; use crate::{atomic::*, mode::*};
use super::*; use super::*;
@ -19,27 +19,6 @@ pub use self::modes::{
CRegularAtomic, RegularAtomic, CRegularAtomic, RegularAtomic,
}; };
/// [`Atomic`] equivalent of [`ParseError`].
pub type AParseError<A> = <A as AtomicBase>::AParseError;
pub type AParseResult<A> = Result<A, AParseError<A>>;
/// [`Atomic`] base.
pub trait AtomicBase: 'static + Send + Sync + Send + Clone + Serializable {
/// Equivalent of [`FactoryBase::ParseError`].
type AParseError: Error;
}
/// This trait combines functionality of [`Mentionable`] and [`Factory`],
/// while limiting [`MentionableTop::points_typed`] (and corresponding [`MentionableTop::topology`])
/// to an empty sequence.
pub trait Atomic: AtomicBase + ParseMode {
/// Static equivalent of [`FactoryParse::deserialize`].
fn a_deserialize(stream: impl Stream) -> AParseResult<Self>;
/// Static equivalent of [`FactoryParse::extend`].
fn a_extend(self, tail: &[u8]) -> AParseResult<Self>;
}
fn _parse_slice<A: Atomic>(slice: &[u8]) -> AParseResult<A> { fn _parse_slice<A: Atomic>(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::a_deserialize(&mut deserializer)?;

View File

@ -3,6 +3,7 @@
mod modes; mod modes;
pub mod static_pair; pub mod static_pair;
use crate::atomic::*;
use crate::mode::*; use crate::mode::*;
use crate::rcore::*; use crate::rcore::*;