--- a/src/sets.rs Mon Dec 30 15:46:28 2024 -0500 +++ b/src/sets.rs Mon Jan 06 20:29:25 2025 -0500 @@ -7,7 +7,7 @@ use crate::loc::Loc; use crate::euclidean::Euclidean; use crate::instance::{Space, Instance}; -use serde::Serialize; +use serde::{Serialize, Deserialize}; pub mod cube; pub use cube::Cube; @@ -62,7 +62,7 @@ /// /// The halfspace is $H = \\{ t v + a \mid a^⊤ v = 0 \\}$, where $v$ is the orthogonal /// vector and $t$ the offset. -#[derive(Clone,Copy,Debug,Serialize,Eq,PartialEq)] +#[derive(Clone,Copy,Debug,Serialize,Deserialize,Eq,PartialEq)] pub struct Halfspace<A, F> where A : Euclidean<F>, F : Float { pub orthogonal : A, pub offset : F, @@ -116,7 +116,11 @@ } /// Polygons defined by `N` `Halfspace`s. -#[derive(Clone,Copy,Debug,Eq,PartialEq)] +#[derive(Clone,Copy,Debug,Eq,PartialEq,Serialize,Deserialize)] +#[serde(bound( + serialize = "[Halfspace<A,F>; N] : Serialize", + deserialize = "[Halfspace<A,F>; N] : for<'a> Deserialize<'a>" +))] pub struct NPolygon<A, F, const N : usize>(pub [Halfspace<A,F>; N]) where A : Euclidean<F>, F : Float;