diff --git a/src/rstd/atomic.rs b/src/rstd/atomic.rs
index e06d58e..57915c2 100644
--- a/src/rstd/atomic.rs
+++ b/src/rstd/atomic.rs
@@ -14,7 +14,10 @@ use crate::rcore::*;
use super::*;
-pub use self::modes::{AtomicProxy, RegularAtomic};
+pub use self::modes::{
+ AExtensionResultM, AExtensionSourceM, AParseResultM, AtomicModeParse, AtomicProxy,
+ RegularAtomic,
+};
pub type AParseError = ::AParseError;
diff --git a/src/rstd/atomic/modes.rs b/src/rstd/atomic/modes.rs
index 54cfac0..8b6a623 100644
--- a/src/rstd/atomic/modes.rs
+++ b/src/rstd/atomic/modes.rs
@@ -20,6 +20,26 @@ where
}
}
+pub type AParseResultM = <::Mode as Mode>::ParseResult, I>;
+
+pub type AExtensionResultM =
+ <::Mode as Mode>::ExtensionResult>;
+
+pub type AExtensionSourceM =
+ <::Mode as Mode>::ExtensionSource>;
+
+pub trait AtomicModeParse: AtomicBase + ParseMode {
+ fn ma_deserialize(&self, inlining: I) -> AParseResultM;
+
+ fn ma_extend(
+ &self,
+ mentionable: AExtensionSourceM,
+ tail: &[u8],
+ ) -> AExtensionResultM;
+
+ fn ma_prepare(mentionable: Self) -> AExtensionSourceM;
+}
+
pub trait RegularAtomic: AtomicBase + ImplMode {
fn ra_deserialize(inlining: impl Inlining) -> AParseResult;
fn ra_extend(self, tail: &[u8]) -> AParseResult;