use super::*;
pub struct Point<'a, Ctx: Context<'a>, A: MentionableBase<'a>> {
pub point: Hash,
pub origin: Arc<dyn Origin<'a, Ctx, Mtbl = A>>,
}
impl<'a, Ctx: Context<'a>, A: MentionableBase<'a>> PartialEq for Point<'a, Ctx, A> {
fn eq(&self, other: &Self) -> bool {
self.point == other.point
}
}
impl<'a, Ctx: Context<'a>, A: MentionableBase<'a>> Clone for Point<'a, Ctx, A> {
fn clone(&self) -> Self {
Self {
point: self.point,
origin: self.origin.clone(),
}
}
}
impl<'a, Ctx: Context<'a>, A: MentionableBase<'a>> Point<'a, Ctx, A>
where
A::Fctr: FactoryParse<'a, Ctx>,
{
pub fn resolve(&self) -> Resolution<'a, Ctx, A> {
self.origin.ref_resolve()
}
pub fn resolve_map<B: 'a + Send>(
&self,
f: impl 'a + Send + FnOnce(ResolutionResult<'a, Ctx, A>) -> B,
) -> Wrapped<'a, Ctx, B> {
self.origin.resolve_map(f)
}
}