diff --git a/src/rstd/atomic.rs b/src/rstd/atomic.rs
index 68c7dba..1d0555e 100644
--- a/src/rstd/atomic.rs
+++ b/src/rstd/atomic.rs
@@ -12,6 +12,8 @@ use std::marker::PhantomData;
use crate::rcore::*;
+pub use self::modes::{AtomicProxy, RegularAtomic};
+
use super::*;
pub type AParseError = ::AParseError;
@@ -26,7 +28,7 @@ pub trait AtomicBase: 'static + Send + Sync + Send + Clone + Serializable {
type AParseError: Error;
}
-pub trait Atomic: AtomicBase {
+pub trait Atomic: AtomicBase + ParseMode {
/// 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 4f34aa9..5046aca 100644
--- a/src/rstd/atomic/array.rs
+++ b/src/rstd/atomic/array.rs
@@ -38,12 +38,16 @@ impl AtomicBase for [u8; N] {
type AParseError = ArrayParseError;
}
-impl Atomic for [u8; N] {
- fn a_deserialize(inlining: impl Inlining) -> AParseResult {
+impl ParseMode for [u8; N] {
+ type Mode = RegularMode;
+}
+
+impl RegularAtomic for [u8; N] {
+ fn ra_deserialize(inlining: impl Inlining) -> AParseResult {
Self::a_ideserialize(inlining).seal()
}
- fn a_extend(self, tail: &[u8]) -> AParseResult {
+ fn ra_extend(self, tail: &[u8]) -> AParseResult {
Err(Self::a_extension_error(tail))
}
}
diff --git a/src/rstd/atomic/au64.rs b/src/rstd/atomic/au64.rs
index 0016fe1..b4917d4 100644
--- a/src/rstd/atomic/au64.rs
+++ b/src/rstd/atomic/au64.rs
@@ -38,12 +38,16 @@ impl AtomicBase for u64 {
type AParseError = IntParseError;
}
-impl Atomic for u64 {
- fn a_deserialize(inlining: impl Inlining) -> AParseResult {
+impl ParseMode for u64 {
+ type Mode = RegularMode;
+}
+
+impl RegularAtomic for u64 {
+ fn ra_deserialize(inlining: impl Inlining) -> AParseResult {
Self::a_ideserialize(inlining).seal()
}
- fn a_extend(self, tail: &[u8]) -> AParseResult {
+ fn ra_extend(self, tail: &[u8]) -> AParseResult {
Err(Self::a_extension_error(tail))
}
}
diff --git a/src/rstd/atomic/boolean.rs b/src/rstd/atomic/boolean.rs
index 2b0aca7..b873a08 100644
--- a/src/rstd/atomic/boolean.rs
+++ b/src/rstd/atomic/boolean.rs
@@ -45,12 +45,16 @@ impl AtomicBase for bool {
type AParseError = BooleanParseError;
}
-impl Atomic for bool {
- fn a_deserialize(inlining: impl Inlining) -> AParseResult {
+impl ParseMode for bool {
+ type Mode = RegularMode;
+}
+
+impl RegularAtomic for bool {
+ fn ra_deserialize(inlining: impl Inlining) -> AParseResult {
Self::a_ideserialize(inlining).seal()
}
- fn a_extend(self, tail: &[u8]) -> AParseResult {
+ fn ra_extend(self, tail: &[u8]) -> AParseResult {
Err(Self::a_extension_error(tail))
}
}
diff --git a/src/rstd/atomic/plain.rs b/src/rstd/atomic/plain.rs
index fdc79dd..0214ab4 100644
--- a/src/rstd/atomic/plain.rs
+++ b/src/rstd/atomic/plain.rs
@@ -32,12 +32,16 @@ impl AtomicBase for Plain {
type AParseError = PlainParseError;
}
-impl Atomic for Plain {
- fn a_deserialize(inlining: impl Inlining) -> AParseResult {
+impl ParseMode for Plain {
+ type Mode = RegularMode;
+}
+
+impl RegularAtomic for Plain {
+ fn ra_deserialize(inlining: impl Inlining) -> AParseResult {
Ok(inlining.iread_all(Plain::from_slice))
}
- fn a_extend(mut self, tail: &[u8]) -> AParseResult {
+ fn ra_extend(mut self, tail: &[u8]) -> AParseResult {
self.data.extend_from_slice(tail);
Ok(self)
}