use crate::{
objects::{Face, Region},
operations::build::Polygon,
storage::Handle,
};
pub trait UpdateFace {
#[must_use]
fn update_region(
&self,
update: impl FnOnce(&Handle<Region>) -> Handle<Region>,
) -> Self;
}
impl UpdateFace for Face {
fn update_region(
&self,
update: impl FnOnce(&Handle<Region>) -> Handle<Region>,
) -> Self {
let region = update(self.region());
Face::new(self.surface().clone(), region)
}
}
impl<const D: usize> UpdateFace for Polygon<D> {
fn update_region(
&self,
update: impl FnOnce(&Handle<Region>) -> Handle<Region>,
) -> Self {
self.replace_face(self.face.update_region(update))
}
}