src/measures/delta.rs

branch
dev
changeset 38
0f59c0d02e13
parent 35
b087e3eab191
--- a/src/measures/delta.rs	Thu Jan 23 23:35:28 2025 +0100
+++ b/src/measures/delta.rs	Mon Jan 06 21:37:03 2025 -0500
@@ -6,7 +6,7 @@
 use super::base::*;
 use crate::types::*;
 use std::ops::{Div, Mul, DivAssign, MulAssign, Neg};
-use serde::ser::{Serialize, Serializer, SerializeStruct};
+use serde::{Serialize, Deserialize};
 use alg_tools::norms::Norm;
 use alg_tools::linops::{Mapping, Linear};
 use alg_tools::instance::{Instance, Space};
@@ -15,7 +15,7 @@
 ///
 /// This is a single spike $\alpha \delta\_x$ for some location $x$ in `Domain` and
 /// a mass $\alpha$ in `F`.
-#[derive(Clone,Copy,Debug)]
+#[derive(Clone,Copy,Debug,Serialize,Deserialize)]
 pub struct DeltaMeasure<Domain, F : Num> {
     // This causes [`csv`] to crash.
     //#[serde(flatten)]
@@ -25,32 +25,6 @@
     pub α : F
 }
 
-const COORDINATE_NAMES : &'static [&'static str] = &[
-    "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7"
-];
-
-// Need to manually implement serialisation as [`csv`] writer fails on
-// structs with nested arrays as well as with #[serde(flatten)].
-impl<F : Num, const N : usize> Serialize for DeltaMeasure<Loc<F, N>, F>
-where
-    F: Serialize,
-{
-    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
-    where
-        S: Serializer,
-    {
-        assert!(N <= COORDINATE_NAMES.len());
-
-        let mut s = serializer.serialize_struct("DeltaMeasure", N+1)?;
-        for (i, e) in (0..).zip(self.x.iter()) {
-            s.serialize_field(COORDINATE_NAMES[i], e)?;
-        }
-        s.serialize_field("weight", &self.α)?;
-        s.end()
-    }
-}
-
-
 impl<Domain, F : Float> Measure<F> for DeltaMeasure<Domain, F> {
     type Domain = Domain;
 }

mercurial