From 404fc8c802d9e8f59afeb59081084408420bca6b Mon Sep 17 00:00:00 2001 From: timofey Date: Fri, 30 Jun 2023 20:50:03 +0000 Subject: [PATCH] `CountedInject` --- src/testing/counted.rs | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/src/testing/counted.rs b/src/testing/counted.rs index cb5f57c..ae0d93c 100644 --- a/src/testing/counted.rs +++ b/src/testing/counted.rs @@ -3,6 +3,7 @@ use std::cmp::max; use crate::func::{context::*, *}; use crate::rcore::*; +use super::inject::*; use super::*; pub struct TestContextCounted; @@ -56,36 +57,20 @@ impl Counted { } } -struct CountedResolver<'a> { - resolver: Rc>, -} +struct CountedInject; -impl<'a> CountedResolver<'a> { - fn new( - resolver: Rc>, - ) -> Rc> { - Rc::new(Self { resolver }) - } -} - -impl<'a> Resolver<'a, TestContextCounted> for CountedResolver<'a> { - fn resolve(self: Rc, address: Address) -> HashResolution<'a, TestContextCounted> { - self.resolver - .clone() - .resolve_map(address, |resolved| { - let (src, resolver) = resolved?; - let delayed: Rc> = - Rc::new(CountedResolver { resolver }); - Ok((src, delayed)) - }) - .add(1) +impl<'a> Inject<'a, TestContextCounted> for CountedInject { + fn inject( + &self, + fa: Wrapped<'a, TestContextCounted, A>, + ) -> Wrapped<'a, TestContextCounted, A> { + fa.add(1) } } pub trait Delayable<'a>: Mentionable<'a, TestContextCounted> + Sized { - fn delay(self: Rc) -> ParseResultA<'a, TestContextCounted, Self> { - let factory = self.factory(); - TypelessMentionable::from_typed(self).cast_full(factory, CountedResolver::new) + fn delay(&self) -> ParseResultA<'a, TestContextCounted, Self> { + Rc::new(CountedInject).inject_mentionable(self) } }