src/sets/cube.rs

branch
dev
changeset 86
d5b0e496b72f
parent 55
7b2ee3e84c5f
--- a/src/sets/cube.rs	Mon Dec 30 15:46:28 2024 -0500
+++ b/src/sets/cube.rs	Mon Jan 06 20:29:25 2025 -0500
@@ -16,7 +16,7 @@
 ```
 */
 
-use serde::ser::{Serialize, Serializer, SerializeTupleStruct};
+use serde::{Serialize, Deserialize};
 use crate::types::*;
 use crate::loc::Loc;
 use crate::sets::SetOrd;
@@ -30,25 +30,14 @@
 
 /// A multi-dimensional cube $∏_{i=1}^N [a_i, b_i)$ with the starting and ending points
 /// along $a_i$ and $b_i$ along each dimension of type `U`.
-#[derive(Copy, Clone, Debug, Eq, PartialEq)]
-pub struct Cube<U : Num, const N : usize>(pub(super) [[U; 2]; N]);
-
-// Need to manually implement as [F; N] serialisation is provided only for some N.
-impl<F : Num + Serialize, const N : usize> Serialize for Cube<F, N>
-where
-    F: Serialize,
-{
-    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
-    where
-        S: Serializer,
-    {
-        let mut ts = serializer.serialize_tuple_struct("Cube", N)?;
-        for e in self.0.iter() {
-            ts.serialize_field(e)?;
-        }
-        ts.end()
-    }
-}
+#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
+#[serde(bound(
+    serialize = "[[U; 2]; N] : Serialize",
+    deserialize = "[[U; 2]; N] : for<'a> Deserialize<'a>",
+))]
+pub struct Cube<U : Num, const N : usize>(
+    pub(super) [[U; 2]; N]
+);
 
 impl<A : Num, const N : usize> FixedLength<N> for Cube<A,N> {
     type Iter = std::array::IntoIter<[A; 2], N>;

mercurial