From eb9a35f3670772b9a4ab40685ceb2bdc586572c8 Mon Sep 17 00:00:00 2001 From: timofey Date: Sat, 5 Aug 2023 13:11:06 +0000 Subject: [PATCH] `mextend_sp` --- src/rstd/inlining/static_pair.rs | 34 +++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/rstd/inlining/static_pair.rs b/src/rstd/inlining/static_pair.rs index 2c6815a..1509a8d 100644 --- a/src/rstd/inlining/static_pair.rs +++ b/src/rstd/inlining/static_pair.rs @@ -176,7 +176,7 @@ where pub fn mdeserialize_sp>( factory_data: &SP::FactoryData, inctx: I, - ) -> ModeResultP>::ParseError, I> { + ) -> ModeResultP { let (fa, fb) = SP::factories(factory_data); let (a, inctx) = fa .ideserialize(inctx) @@ -187,6 +187,21 @@ where |b| SP::from_parsed(factory_data, a, b), ) } + + pub fn mextend_sp( + factory_data: &SP::FactoryData, + mentionable: ExtensionSourceP, + tail: &[u8], + ) -> ExtensionResultP { + let (_, fb) = SP::factories(factory_data); + // annotated to help rust-analyzer + Self::xsbind::( + mentionable, + |pair| pair.into_elements(), + |b| Self::xmap_err(fb.mextend(b, tail), |e| SP::from_error_b(factory_data, e)), + |a, b| SP::from_parsed(factory_data, a, b), + ) + } } impl<'a, Ctx: Context<'a>, SP: StaticPair<'a, Ctx>> FactoryModeParse<'a, Ctx> @@ -206,16 +221,13 @@ where mentionable: ExtensionSourceM<'a, Ctx, Self>, tail: &[u8], ) -> ExtensionResultM<'a, Ctx, Self> { - let (_, fb) = SP::factories(&self.factory_data); - Self::xsbind( - mentionable, - |StaticPairObject { pair }| pair.into_elements(), - |b| { - Self::xmap_err(fb.mextend(b, tail), |e| { - SP::from_error_b(&self.factory_data, e) - }) - }, - |a, b| SP::from_parsed(&self.factory_data, a, b).map(|pair| StaticPairObject { pair }), + Self::xbind( + Self::mextend_sp( + &self.factory_data, + Self::smap(mentionable, |StaticPairObject { pair }| pair), + tail, + ), + |pair| Ok(StaticPairObject { pair }), ) } }