From ba402b62b507ac094c4095fff489ba3d2bfd2548 Mon Sep 17 00:00:00 2001 From: timofey Date: Sun, 30 Jul 2023 19:40:13 +0000 Subject: [PATCH] move `Atomic` to `atomic` --- src/atomic.rs | 37 +++++++++++++++++++++++++++++++++++++ src/mode.rs | 4 ++-- src/rstd/atomic.rs | 23 +---------------------- src/rstd/inlining.rs | 1 + 4 files changed, 41 insertions(+), 24 deletions(-) diff --git a/src/atomic.rs b/src/atomic.rs index 8b13789..7f6fc4d 100644 --- a/src/atomic.rs +++ b/src/atomic.rs @@ -1 +1,38 @@ +use std::error::Error; +use crate::mode::*; + +/// [`Atomic`] equivalent of [`ParseError`]. +/// +/// [`ParseError`]: crate::rcore::ParseError +pub type AParseError = ::AParseError; + +pub type AParseResult = Result>; + +/// [`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; + + /// Static equivalent of [`FactoryParse::extend`]. + /// + /// [`FactoryParse::extend`]: crate::rcore::FactoryParse::extend + fn a_extend(self, tail: &[u8]) -> AParseResult; +} diff --git a/src/mode.rs b/src/mode.rs index af48d66..5b71fda 100644 --- a/src/mode.rs +++ b/src/mode.rs @@ -205,7 +205,7 @@ impl ParseModeExt for F {} /// For auto-implementing [`FactoryParse`] and [`Atomic`]. /// /// [`FactoryParse`]: crate::rcore::FactoryParse -/// [`Atomic`]: crate::rstd::atomic::Atomic +/// [`Atomic`]: crate::atomic::Atomic pub trait ImplMode { /// Same as [`ParseMode::Mode`] type Mode: ?Sized + Mode; @@ -214,7 +214,7 @@ pub trait ImplMode { /// Used with [`WithMode`] for linking [`ImplMode`] to [`FactoryParse`] and [`Atomic`]. /// /// [`FactoryParse`]: crate::rcore::FactoryParse -/// [`Atomic`]: crate::rstd::atomic::Atomic +/// [`Atomic`]: crate::atomic::Atomic pub trait WithParseMode: ImplMode { /// [`WithMode`] implementing [`FactoryModeProxy`] or [`AtomicModeProxy`]. /// diff --git a/src/rstd/atomic.rs b/src/rstd/atomic.rs index 68b6232..e124183 100644 --- a/src/rstd/atomic.rs +++ b/src/rstd/atomic.rs @@ -10,7 +10,7 @@ pub mod plain; use std::marker::PhantomData; -use crate::mode::*; +use crate::{atomic::*, mode::*}; use super::*; @@ -19,27 +19,6 @@ pub use self::modes::{ CRegularAtomic, RegularAtomic, }; -/// [`Atomic`] equivalent of [`ParseError`]. -pub type AParseError = ::AParseError; - -pub type AParseResult = Result>; - -/// [`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; - /// Static equivalent of [`FactoryParse::extend`]. - fn a_extend(self, tail: &[u8]) -> AParseResult; -} - fn _parse_slice(slice: &[u8]) -> AParseResult { let mut deserializer = SliceDeserializer::from(slice); let atomic = A::a_deserialize(&mut deserializer)?; diff --git a/src/rstd/inlining.rs b/src/rstd/inlining.rs index 4ad52d4..59182ef 100644 --- a/src/rstd/inlining.rs +++ b/src/rstd/inlining.rs @@ -3,6 +3,7 @@ mod modes; pub mod static_pair; +use crate::atomic::*; use crate::mode::*; use crate::rcore::*;