fpm_rs/diagnostics/
serialization.rs1use 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}