Skip to main content

fpm_rs/diagnostics/
serialization.rs

1use std::{
2    fs::File,
3    io::{BufReader, BufWriter},
4    path::Path,
5};
6
7use serde::{Deserialize, Serialize};
8
9use super::{FrameDiagnosticRecord, IterationDiagnostics, RawFrameStatisticsRecord};
10
11#[derive(Clone, Debug, Default, Serialize, Deserialize)]
12pub struct ReconstructionDiagnostics {
13    pub iteration_history: Vec<IterationDiagnostics>,
14
15    pub frame_diagnostics: Vec<FrameDiagnosticRecord>,
16
17    pub raw_frame_stats: Vec<RawFrameStatisticsRecord>,
18
19    pub coverage: Option<super::FourierCoverageDiagnostics>,
20
21    pub ground_truth_metrics: Option<crate::metrics::complex_field::ComplexFieldComparisonMetrics>,
22}
23
24impl ReconstructionDiagnostics {
25    pub fn to_json_file<P: AsRef<Path>>(&self, path: P) -> crate::Result<()> {
26        let writer = BufWriter::new(File::create(path)?);
27        serde_json::to_writer_pretty(writer, self)?;
28        Ok(())
29    }
30
31    pub fn from_json_file<P: AsRef<Path>>(path: P) -> crate::Result<Self> {
32        let reader = BufReader::new(File::open(path)?);
33        Ok(serde_json::from_reader(reader)?)
34    }
35}