From a43f1dbf27408b331de3d9af14f3cc13c725e28c Mon Sep 17 00:00:00 2001 From: timofey Date: Sun, 3 Sep 2023 17:35:53 +0000 Subject: [PATCH] `ref_resolve_bytes`/`resolve_bytes_map` --- src/rcore/origin.rs | 11 +++++++++++ src/rstd/cast.rs | 2 +- src/rstd/singular.rs | 2 +- src/rstd/wrapped_origin.rs | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/rcore/origin.rs b/src/rcore/origin.rs index 04a11ae..1bebb36 100644 --- a/src/rcore/origin.rs +++ b/src/rcore/origin.rs @@ -26,6 +26,10 @@ pub trait OriginMap<'a, Ctx: Context<'a>>: Origin<'a, Ctx> { self.clone().resolve() } + fn ref_resolve_bytes(self: &Arc) -> HashResolution<'a, Ctx> { + self.clone().resolve_bytes() + } + fn resolve_map( self: &Arc, f: impl 'a + Send + FnOnce(ResolutionResult<'a, Ctx, Self::Mtbl>) -> T, @@ -35,6 +39,13 @@ pub trait OriginMap<'a, Ctx: Context<'a>>: Origin<'a, Ctx> { { Ctx::fmap(self.ref_resolve(), f) } + + fn resolve_bytes_map( + self: &Arc, + f: impl 'a + Send + FnOnce(HashResolutionResult<'a, Ctx>) -> T, + ) -> Wrapped<'a, Ctx, T> { + Ctx::fmap(self.ref_resolve_bytes(), f) + } } impl<'a, Ctx: Context<'a>, R: ?Sized + Origin<'a, Ctx>> OriginMap<'a, Ctx> for R {} diff --git a/src/rstd/cast.rs b/src/rstd/cast.rs index 9b01001..586c20d 100644 --- a/src/rstd/cast.rs +++ b/src/rstd/cast.rs @@ -201,7 +201,7 @@ fn cast_origin<'a, Ctx: CastCtx<'a>, A: Mentionable<'a, Ctx>>( wrapped_origin( factory.clone(), move || cast_resolve(typeless_origin.clone(), factory.clone()), - move || origin_rb.clone().resolve_bytes(), + move || origin_rb.ref_resolve_bytes(), ) } diff --git a/src/rstd/singular.rs b/src/rstd/singular.rs index 13276ed..2c73c50 100644 --- a/src/rstd/singular.rs +++ b/src/rstd/singular.rs @@ -12,7 +12,7 @@ impl<'a, Ctx: Context<'a>, A: Mentionable<'a, Ctx>> SingularResolution<'a, Ctx> for Point<'a, Ctx, A> { fn singular(self: Arc) -> HashResolution<'a, Ctx> { - self.origin.clone().resolve_bytes() + self.origin.ref_resolve_bytes() } fn s_hash(&self) -> Hash { diff --git a/src/rstd/wrapped_origin.rs b/src/rstd/wrapped_origin.rs index 13f1062..c205a4f 100644 --- a/src/rstd/wrapped_origin.rs +++ b/src/rstd/wrapped_origin.rs @@ -39,7 +39,7 @@ pub trait MappableOrigin<'a, Ctx: Context<'a>>: Origin<'a, Ctx> { let map_err = map_err.clone(); map_resolve(move || origin.ref_resolve(), map_ok, map_err) }), - w_resolve_bytes: Box::new(move || origin_rb.clone().resolve_bytes()), + w_resolve_bytes: Box::new(move || origin_rb.ref_resolve_bytes()), }; Arc::new(origin) }