diff --git a/src/rstd/atomic/au64.rs b/src/rstd/atomic/au64.rs index bd4555a..84ba8be 100644 --- a/src/rstd/atomic/au64.rs +++ b/src/rstd/atomic/au64.rs @@ -50,6 +50,12 @@ impl InlineableAtomic for u64 { fn a_extension_error(tail: &[u8]) -> Self::AParseError { IntParseError::ExtraData(tail.len()) } + + fn a_ideserialize(deserializer: D) -> ADParseResult { + let (x, deserializer) = + deserializer.iread_n_const::<8>(|slice| IntParseError::from(slice))?; + Ok((u64::from_le_bytes(x), deserializer)) + } } impl ConstSizeAtomic for u64 { diff --git a/src/rstd/atomic/boolean.rs b/src/rstd/atomic/boolean.rs index 2422201..bc06d6e 100644 --- a/src/rstd/atomic/boolean.rs +++ b/src/rstd/atomic/boolean.rs @@ -62,6 +62,16 @@ impl InlineableAtomic for bool { fn a_extension_error(tail: &[u8]) -> Self::AParseError { BooleanParseError::ExtraData(tail.len()) } + + fn a_ideserialize(deserializer: D) -> ADParseResult { + let (byte, deserializer) = + deserializer.iread_n_const::<1>(|slice| BooleanParseError::from(slice))?; + match byte[0] { + 0 => Ok((false, deserializer)), + 1 => Ok((true, deserializer)), + value => Err(BooleanParseError::OutOfBounds(value)), + } + } } impl ConstSizeAtomic for bool { diff --git a/src/rstd/inlining.rs b/src/rstd/inlining.rs index 359cdc7..d6e8a13 100644 --- a/src/rstd/inlining.rs +++ b/src/rstd/inlining.rs @@ -117,6 +117,8 @@ pub type ADParseResult = Result<(A, D), ::AParseError>; /// Atomic analogue of [`InlineableFactory`]/[`InlineableObject`]. pub trait InlineableAtomic: Atomic { fn a_extension_error(tail: &[u8]) -> Self::AParseError; + + fn a_ideserialize(deserializer: D) -> ADParseResult; } /// Atomic analogue of [`ConstSizeFactory`]/[`ConstSizeObject`].