metrale_circuit/venn/
measurements.rs1use std::collections::BTreeMap;
11
12use serde::Deserialize;
13
14#[derive(Debug, Clone, Copy, PartialEq)]
16pub struct Measured {
17 pub time_us: f64,
19 pub pct_of_floor: f64,
21}
22
23pub type Measurements = BTreeMap<String, Measured>;
25
26#[derive(Deserialize)]
27struct File {
28 m: Vec<Row>,
29}
30
31#[derive(Deserialize)]
32struct Row {
33 kernel: String,
34 regime: String,
35 time_us: f64,
36 pct_of_floor: f64,
37}
38
39pub fn parse_measurements(text: &str) -> Result<Measurements, String> {
42 let file: File = toml::from_str(text).map_err(|e| format!("measurements.toml: {e}"))?;
43 let mut out = Measurements::new();
44 for r in file.m {
45 let key = format!("{} @ {}", r.kernel, r.regime);
46 let row = Measured {
47 time_us: r.time_us,
48 pct_of_floor: r.pct_of_floor,
49 };
50 if out.insert(key.clone(), row).is_some() {
51 return Err(format!("measurements.toml: `{key}` names two rows"));
52 }
53 }
54 Ok(out)
55}