CountedInject
This commit is contained in:
parent
e3ca573bdf
commit
404fc8c802
@ -3,6 +3,7 @@ use std::cmp::max;
|
|||||||
use crate::func::{context::*, *};
|
use crate::func::{context::*, *};
|
||||||
use crate::rcore::*;
|
use crate::rcore::*;
|
||||||
|
|
||||||
|
use super::inject::*;
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
pub struct TestContextCounted;
|
pub struct TestContextCounted;
|
||||||
@ -56,36 +57,20 @@ impl<A> Counted<A> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct CountedResolver<'a> {
|
struct CountedInject;
|
||||||
resolver: Rc<dyn Resolver<'a, TestContextCounted>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> CountedResolver<'a> {
|
impl<'a> Inject<'a, TestContextCounted> for CountedInject {
|
||||||
fn new(
|
fn inject<A: 'a>(
|
||||||
resolver: Rc<dyn Resolver<'a, TestContextCounted>>,
|
&self,
|
||||||
) -> Rc<dyn Resolver<'a, TestContextCounted>> {
|
fa: Wrapped<'a, TestContextCounted, A>,
|
||||||
Rc::new(Self { resolver })
|
) -> Wrapped<'a, TestContextCounted, A> {
|
||||||
}
|
fa.add(1)
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> Resolver<'a, TestContextCounted> for CountedResolver<'a> {
|
|
||||||
fn resolve(self: Rc<Self>, address: Address) -> HashResolution<'a, TestContextCounted> {
|
|
||||||
self.resolver
|
|
||||||
.clone()
|
|
||||||
.resolve_map(address, |resolved| {
|
|
||||||
let (src, resolver) = resolved?;
|
|
||||||
let delayed: Rc<dyn Resolver<'a, TestContextCounted>> =
|
|
||||||
Rc::new(CountedResolver { resolver });
|
|
||||||
Ok((src, delayed))
|
|
||||||
})
|
|
||||||
.add(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait Delayable<'a>: Mentionable<'a, TestContextCounted> + Sized {
|
pub trait Delayable<'a>: Mentionable<'a, TestContextCounted> + Sized {
|
||||||
fn delay(self: Rc<Self>) -> ParseResultA<'a, TestContextCounted, Self> {
|
fn delay(&self) -> ParseResultA<'a, TestContextCounted, Self> {
|
||||||
let factory = self.factory();
|
Rc::new(CountedInject).inject_mentionable(self)
|
||||||
TypelessMentionable::from_typed(self).cast_full(factory, CountedResolver::new)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user