AtomicModeParse for StaticPairObject
This commit is contained in:
parent
68daaf1ccb
commit
e0b219b9e3
@ -231,3 +231,31 @@ impl<SP: StaticPairAtomic> AtomicBase for StaticPairObject<SP> {
|
||||
impl<SP: StaticPairAtomic> ParseMode for StaticPairObject<SP> {
|
||||
type Mode = <SP::B as ParseMode>::Mode;
|
||||
}
|
||||
|
||||
impl<SP: StaticPairAtomic> AtomicModeParse for StaticPairObject<SP>
|
||||
where
|
||||
SP::A: InliningAtomic,
|
||||
SP::B: AtomicModeParse,
|
||||
{
|
||||
fn ma_deserialize<I: Stream>(stream: I) -> AModeResultM<Self, I> {
|
||||
let (a, stream) =
|
||||
<SP::A as InliningAtomic>::a_ideserialize(stream).map_err(|e| SP::from_error_a(e))?;
|
||||
Self::bind(
|
||||
<SP::B as AtomicModeParse>::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<Self>, tail: &[u8]) -> AExtensionResultM<Self> {
|
||||
Self::xsbind(
|
||||
atomic,
|
||||
|StaticPairObject { pair }| pair.into_elements(),
|
||||
|b| {
|
||||
Self::xmap_err(<SP::B as AtomicModeParse>::ma_extend(b, tail), |e| {
|
||||
SP::from_error_b(e)
|
||||
})
|
||||
},
|
||||
|a, b| SP::from_parsed(a, b).map(|pair| StaticPairObject { pair }),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user