use crate::motion::{r2::Point, se2};
pub trait MaybePositioned {
fn maybe_point(&self) -> Option<Point>;
}
pub trait Positioned: MaybePositioned {
fn point(&self) -> Point {
self.maybe_point().unwrap()
}
}
impl MaybePositioned for Point {
fn maybe_point(&self) -> Option<Point> {
Some(*self)
}
}
impl Positioned for Point {}
impl MaybePositioned for se2::Position {
fn maybe_point(&self) -> Option<Point> {
Some(self.translation.vector.into())
}
}
impl Positioned for se2::Position {}
impl MaybePositioned for usize {
fn maybe_point(&self) -> Option<Point> {
None
}
}