From ab5892f238be3965f4022e60baff4ed66e135d32 Mon Sep 17 00:00:00 2001 From: timofey Date: Fri, 28 Jul 2023 21:12:28 +0000 Subject: [PATCH] `AtomicBase` --- src/rstd/atomic.rs | 9 +++++++-- src/rstd/atomic/array.rs | 4 +++- src/rstd/atomic/au64.rs | 4 +++- src/rstd/atomic/boolean.rs | 4 +++- src/rstd/atomic/plain.rs | 4 +++- src/rstd/inlining.rs | 2 +- 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/rstd/atomic.rs b/src/rstd/atomic.rs index 89fbfa9..02e7bdd 100644 --- a/src/rstd/atomic.rs +++ b/src/rstd/atomic.rs @@ -13,14 +13,19 @@ use crate::rcore::*; use super::*; -pub type AParseResult = Result::AParseError>; +pub type AParseError = ::AParseError; + +pub type AParseResult = Result>; /// This trait combines functionality of [`Mentionable`] and [`Factory`], /// while limiting [`Mentionable::points_typed`] (and corresponding [`Mentionable::topology`]) /// to an empty sequence. -pub trait Atomic: 'static + Send + Sync + Send + Clone + Serializable { +pub trait AtomicBase: 'static + Send + Sync + Send + Clone + Serializable { /// Equivalent of [`FactoryBase::ParseError`]. type AParseError: Error; +} + +pub trait Atomic: AtomicBase { /// Static equivalent of [`Factory::deserialize`]. fn a_deserialize(inlining: impl Inlining) -> AParseResult; /// Static equivalent of [`Factory::extend`]. diff --git a/src/rstd/atomic/array.rs b/src/rstd/atomic/array.rs index 8251913..4f34aa9 100644 --- a/src/rstd/atomic/array.rs +++ b/src/rstd/atomic/array.rs @@ -34,9 +34,11 @@ impl From<&[u8]> for ArrayParseError { } } -impl Atomic for [u8; N] { +impl AtomicBase for [u8; N] { type AParseError = ArrayParseError; +} +impl Atomic for [u8; N] { fn a_deserialize(inlining: impl Inlining) -> AParseResult { Self::a_ideserialize(inlining).seal() } diff --git a/src/rstd/atomic/au64.rs b/src/rstd/atomic/au64.rs index 6ec40ee..0016fe1 100644 --- a/src/rstd/atomic/au64.rs +++ b/src/rstd/atomic/au64.rs @@ -34,9 +34,11 @@ impl From<&[u8]> for IntParseError { } } -impl Atomic for u64 { +impl AtomicBase for u64 { type AParseError = IntParseError; +} +impl Atomic for u64 { fn a_deserialize(inlining: impl Inlining) -> AParseResult { Self::a_ideserialize(inlining).seal() } diff --git a/src/rstd/atomic/boolean.rs b/src/rstd/atomic/boolean.rs index a694af9..2b0aca7 100644 --- a/src/rstd/atomic/boolean.rs +++ b/src/rstd/atomic/boolean.rs @@ -41,9 +41,11 @@ impl From<&[u8]> for BooleanParseError { } } -impl Atomic for bool { +impl AtomicBase for bool { type AParseError = BooleanParseError; +} +impl Atomic for bool { fn a_deserialize(inlining: impl Inlining) -> AParseResult { Self::a_ideserialize(inlining).seal() } diff --git a/src/rstd/atomic/plain.rs b/src/rstd/atomic/plain.rs index f990d56..fdc79dd 100644 --- a/src/rstd/atomic/plain.rs +++ b/src/rstd/atomic/plain.rs @@ -28,9 +28,11 @@ impl Serializable for Plain { } } -impl Atomic for Plain { +impl AtomicBase for Plain { type AParseError = PlainParseError; +} +impl Atomic for Plain { fn a_deserialize(inlining: impl Inlining) -> AParseResult { Ok(inlining.iread_all(Plain::from_slice)) } diff --git a/src/rstd/inlining.rs b/src/rstd/inlining.rs index 7b26785..0e1772e 100644 --- a/src/rstd/inlining.rs +++ b/src/rstd/inlining.rs @@ -45,7 +45,7 @@ pub trait ConstSizeObject<'a, Ctx: Context<'a>>: FixedSizeObject<'a, Ctx> { const SIZE: usize; } -pub type ADParseResult = Result<(A, D), ::AParseError>; +pub type ADParseResult = Result<(A, D), AParseError>; /// Atomic analogue of [`InlineableFactory`]/[`InlineableObject`]. pub trait InlineableAtomic: Atomic {