detached std::{typeless,cast} from points

This commit is contained in:
AF 2023-05-07 17:04:47 +00:00
parent 43ae010a93
commit 8410d6ad7f
2 changed files with 29 additions and 2 deletions

View File

@ -87,7 +87,7 @@ where
|resolved| match resolved { |resolved| match resolved {
Ok(mentionable) => { Ok(mentionable) => {
let resolver: Rc<dyn Resolver<'a, Ctx>> = Rc::new(CastResolver { let resolver: Rc<dyn Resolver<'a, Ctx>> = Rc::new(CastResolver {
points: mentionable.points_vec(), points: mentionable.points_vec_2(),
}); });
Ok((mentionable.bytes(), resolver)) Ok((mentionable.bytes(), resolver))
} }
@ -117,7 +117,7 @@ where
factory.parse_slice( factory.parse_slice(
&self.bytes(), &self.bytes(),
map_resolver(Rc::new(CastResolver { map_resolver(Rc::new(CastResolver {
points: self.points_vec(), points: self.points_vec_2(),
})), })),
) )
} }

View File

@ -101,3 +101,30 @@ impl<'a, Ctx: 'a + Context, A: Mentionable<'a, Ctx>> Point<'a, Ctx, A> {
} }
} }
} }
pub trait MentionableExt2<'a, Ctx: 'a + Context>: Mentionable<'a, Ctx> {
/// References ([Point]s) to other objects. Typeless.
fn points_typeless(&self, points: &mut Vec<Point<'a, Ctx, TypelessMentionable<'a, Ctx>>>);
/// [Vec] of [Point]s as used by [`Mentionable::topology`].
fn points_vec_2(&self) -> Vec<Point<'a, Ctx, TypelessMentionable<'a, Ctx>>>;
}
impl<'a, Ctx: 'a + Context, A: Mentionable<'a, Ctx>> MentionableExt2<'a, Ctx> for A {
fn points_typeless(&self, points: &mut Vec<Point<'a, Ctx, TypelessMentionable<'a, Ctx>>>) {
self.points_typed(points)
}
fn points_vec_2(&self) -> Vec<Point<'a, Ctx, TypelessMentionable<'a, Ctx>>> {
let mut points = Vec::new();
self.points_typeless(&mut points);
points
}
}
impl<'a, Ctx: 'a + Context> TakesPoints<'a, Ctx>
for Vec<Point<'a, Ctx, TypelessMentionable<'a, Ctx>>>
{
fn take<A: Mentionable<'a, Ctx>>(&mut self, point: &Point<'a, Ctx, A>) {
self.push(point.typeless());
}
}