diff --git a/src/rstd/atomic/array.rs b/src/rstd/atomic/array.rs index d912c84..6835caa 100644 --- a/src/rstd/atomic/array.rs +++ b/src/rstd/atomic/array.rs @@ -42,12 +42,12 @@ impl ImplMode for [u8; N] { type Mode = InliningMode; } -impl InliningAtomic for [u8; N] { - fn a_extension_error(tail: &[u8]) -> Self::AParseError { +impl QInliningAtomic for [u8; N] { + fn qa_extension_error(tail: &[u8]) -> Self::AParseError { ArrayParseError::ExtraData(tail.len()) } - fn a_ideserialize(inlining: D) -> ADParseResult { + fn qa_ideserialize(inlining: D) -> ADParseResult { inlining.iread_n_const::(|slice| ArrayParseError::from(slice)) } } diff --git a/src/rstd/atomic/au64.rs b/src/rstd/atomic/au64.rs index e4b61db..8a34e66 100644 --- a/src/rstd/atomic/au64.rs +++ b/src/rstd/atomic/au64.rs @@ -42,12 +42,12 @@ impl ImplMode for u64 { type Mode = InliningMode; } -impl InliningAtomic for u64 { - fn a_extension_error(tail: &[u8]) -> Self::AParseError { +impl QInliningAtomic for u64 { + fn qa_extension_error(tail: &[u8]) -> Self::AParseError { IntParseError::ExtraData(tail.len()) } - fn a_ideserialize(inlining: D) -> ADParseResult { + fn qa_ideserialize(inlining: D) -> ADParseResult { let (x, inlining) = inlining.iread_n_const::<8>(|slice| IntParseError::from(slice))?; Ok((u64::from_le_bytes(x), inlining)) } diff --git a/src/rstd/atomic/boolean.rs b/src/rstd/atomic/boolean.rs index 45e37b6..5fc6775 100644 --- a/src/rstd/atomic/boolean.rs +++ b/src/rstd/atomic/boolean.rs @@ -49,12 +49,12 @@ impl ImplMode for bool { type Mode = InliningMode; } -impl InliningAtomic for bool { - fn a_extension_error(tail: &[u8]) -> Self::AParseError { +impl QInliningAtomic for bool { + fn qa_extension_error(tail: &[u8]) -> Self::AParseError { BooleanParseError::ExtraData(tail.len()) } - fn a_ideserialize(inlining: D) -> ADParseResult { + fn qa_ideserialize(inlining: D) -> ADParseResult { let (byte, inlining) = inlining.iread_n_const::<1>(|slice| BooleanParseError::from(slice))?; match byte[0] { diff --git a/src/rstd/inlining.rs b/src/rstd/inlining.rs index cf3dc61..255c5aa 100644 --- a/src/rstd/inlining.rs +++ b/src/rstd/inlining.rs @@ -52,6 +52,12 @@ pub trait ConstSizeObject<'a, Ctx: Context<'a>>: FixedSizeObject<'a, Ctx> { pub type ADParseResult = Result<(A, D), AParseError>; +pub trait QInliningAtomic: AtomicBase + ImplMode { + fn qa_extension_error(tail: &[u8]) -> Self::AParseError; + + fn qa_ideserialize(inlining: D) -> ADParseResult; +} + /// Atomic analogue of [`InliningFactory`]/[`InliningObject`]. pub trait InliningAtomic: AtomicBase + ParseMode { fn a_extension_error(tail: &[u8]) -> Self::AParseError; @@ -59,6 +65,16 @@ pub trait InliningAtomic: AtomicBase + ParseMode { fn a_ideserialize(inlining: D) -> ADParseResult; } +impl> InliningAtomic for A { + fn a_extension_error(tail: &[u8]) -> Self::AParseError { + A::ma_extend((), tail) + } + + fn a_ideserialize(inlining: D) -> ADParseResult { + A::ma_deserialize(inlining) + } +} + /// Atomic analogue of [`ConstSizeFactory`]/[`ConstSizeObject`]. /// /// Note: `FixedSizeAtomic` doesn't exist because it would diff --git a/src/rstd/inlining/modes.rs b/src/rstd/inlining/modes.rs index 975f46e..234ef5d 100644 --- a/src/rstd/inlining/modes.rs +++ b/src/rstd/inlining/modes.rs @@ -68,15 +68,15 @@ impl<'a, Ctx: Context<'a>, F: InliningFactory<'a, Ctx>> FactoryModeProxy<'a, Ctx fn pmprepare(_mentionable: Mtbl<'a, Ctx, Self::F>) -> ExtensionSourceM<'a, Ctx, Self::F> {} } -impl AtomicModeProxy for WithMode { +impl AtomicModeProxy for WithMode { type A = A; fn pma_deserialize(inlining: I) -> AParseResultM { - A::a_ideserialize(inlining) + A::qa_ideserialize(inlining) } fn pma_extend(_atomic: AExtensionSourceM, tail: &[u8]) -> AExtensionResultM { - A::a_extension_error(tail) + A::qa_extension_error(tail) } fn pma_prepare(_atomic: Self::A) -> AExtensionSourceM {}