From b1a19cc9f5f7e697a2e57e90063ceec50d9bdf89 Mon Sep 17 00:00:00 2001 From: timofey Date: Tue, 30 May 2023 00:16:19 +0000 Subject: [PATCH] `map_parse` --- src/rcore/resolution.rs | 9 +++++++++ src/rstd/collections/avl/bounds.rs | 5 +---- src/rstd/wrapped_origin.rs | 5 +---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/rcore/resolution.rs b/src/rcore/resolution.rs index 5dbfc2c..4a3ec50 100644 --- a/src/rcore/resolution.rs +++ b/src/rcore/resolution.rs @@ -9,6 +9,15 @@ pub enum ResolutionError { Parse(P), } +impl ResolutionError { + pub fn map_parse(self, f: impl FnOnce(P) -> Px) -> ResolutionError { + match self { + ResolutionError::Lookup(l) => ResolutionError::Lookup(l), + ResolutionError::Parse(p) => ResolutionError::Parse(f(p)), + } + } +} + /// See [`ResolutionResult`]. pub type ResolutionFailure<'a, Ctx, A> = ResolutionError<>::LookupError, ParseError<'a, Ctx, Fctr<'a, Ctx, A>>>; diff --git a/src/rstd/collections/avl/bounds.rs b/src/rstd/collections/avl/bounds.rs index 96ddb88..824a648 100644 --- a/src/rstd/collections/avl/bounds.rs +++ b/src/rstd/collections/avl/bounds.rs @@ -250,10 +250,7 @@ impl<'a, Ctx: Context<'a>, A: Mentionable<'a, Ctx>> BoundReference<'a, Ctx, A> { let bounds = self.bounds.clone(); ::fmap(self.reference.resolve(), move |resolution| { let node = resolution - .map_err(|err| match err { - ResolutionError::Lookup(lookup) => ResolutionError::Lookup(lookup), - ResolutionError::Parse(avl) => ResolutionError::Parse(BoundError::Avl(avl)), - })? + .map_err(|e| e.map_parse(BoundError::Avl))? .as_ref() .clone(); let (bl, br) = bounds diff --git a/src/rstd/wrapped_origin.rs b/src/rstd/wrapped_origin.rs index 8bfe660..48b53cf 100644 --- a/src/rstd/wrapped_origin.rs +++ b/src/rstd/wrapped_origin.rs @@ -44,10 +44,7 @@ fn map_resolve<'a, Ctx: Context<'a>, A: Mentionable<'a, Ctx>, B: Mentionable<'a, ) -> Resolution<'a, Ctx, B> { Ctx::T::fmap(resolve(), move |resolved| match resolved { Ok(mentionable) => Ok(Rc::new(map_ok(mentionable))), - Err(ResolutionError::Parse(parse_error)) => { - Err(ResolutionError::Parse(map_err(parse_error))) - } - Err(ResolutionError::Lookup(lookup_error)) => Err(ResolutionError::Lookup(lookup_error)), + Err(e) => Err(e.map_parse(map_err)), }) }