diff --git a/src/rstd/inlining/static_pair.rs b/src/rstd/inlining/static_pair.rs index 5775ed0..da6b9d9 100644 --- a/src/rstd/inlining/static_pair.rs +++ b/src/rstd/inlining/static_pair.rs @@ -231,3 +231,31 @@ impl AtomicBase for StaticPairObject { impl ParseMode for StaticPairObject { type Mode = ::Mode; } + +impl AtomicModeParse for StaticPairObject +where + SP::A: InliningAtomic, + SP::B: AtomicModeParse, +{ + fn ma_deserialize(stream: I) -> AModeResultM { + let (a, stream) = + ::a_ideserialize(stream).map_err(|e| SP::from_error_a(e))?; + Self::bind( + ::ma_deserialize(stream).map_err(|e| SP::from_error_b(e))?, + |b| SP::from_parsed(a, b).map(|pair| StaticPairObject { pair }), + ) + } + + fn ma_extend(atomic: AExtensionSourceM, tail: &[u8]) -> AExtensionResultM { + Self::xsbind( + atomic, + |StaticPairObject { pair }| pair.into_elements(), + |b| { + Self::xmap_err(::ma_extend(b, tail), |e| { + SP::from_error_b(e) + }) + }, + |a, b| SP::from_parsed(a, b).map(|pair| StaticPairObject { pair }), + ) + } +}