use f3l_core::serde::{self, Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(crate = "self::serde")]
pub enum FaceType<T> {
Id(usize),
Entry(T),
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(crate = "self::serde")]
pub struct Face<T> {
pub point: [FaceType<T>; 3],
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(crate = "self::serde")]
pub struct FaceInstanceType<P: Copy> {
pub point: [P; 3],
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(crate = "self::serde")]
pub struct FaceIdType {
pub point: [usize; 3],
}
impl<T> From<FaceIdType> for Face<T> {
fn from(value: FaceIdType) -> Self {
Self {
point: [
FaceType::Id(value.point[0]),
FaceType::Id(value.point[1]),
FaceType::Id(value.point[2]),
],
}
}
}
impl<P: Copy> From<FaceInstanceType<P>> for Face<P> {
fn from(value: FaceInstanceType<P>) -> Self {
Self {
point: [
FaceType::Entry(value.point[0]),
FaceType::Entry(value.point[1]),
FaceType::Entry(value.point[2]),
],
}
}
}