doris_rs/record/
observation.rs

1use std::str::FromStr;
2
3#[cfg(doc)]
4use crate::prelude::Observable;
5
6#[cfg(feature = "serde")]
7use serde::{Deserialize, Serialize};
8
9use crate::{error::ParsingError, prelude::SNR};
10
11/// Signal [Observation].
12#[derive(Copy, Default, Clone, Debug, PartialEq, PartialOrd)]
13#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
14pub struct Observation {
15    /// [SNR] for all frequency measurements
16    pub snr: Option<SNR>,
17
18    // /// Phase lock [Flag] for phase measurements specifically.
19    // pub phase_flag: Option<Flag>,
20    /// Measured value, unit is [Observable] dependent.
21    pub value: f64,
22}
23
24impl Observation {
25    /// Define DORIS [Observation] with [SNR] value
26    pub fn with_snr(mut self, snr: SNR) -> Self {
27        self.snr = Some(snr);
28        self
29    }
30
31    // /// Defines DORIS phase measurement with associated [Flag]
32    // pub fn with_phase_flag(mut self, flag: Flag) -> Self {
33    //     self.phase_flag = Some(flag);
34    //     self
35    // }
36
37    /// Defines new DORIS measurement with desired value.
38    /// Unit and meaning is dependent on attached [Observable].
39    pub fn with_value(mut self, value: f64) -> Self {
40        self.value = value;
41        self
42    }
43}
44
45#[cfg(test)]
46mod test {
47    use super::*;
48
49    // #[test]
50    // fn default_flag() {
51    //     assert_eq!(Flag::default(), Flag::Ok);
52    // }
53
54    // #[test]
55    // fn parsing() {
56    //     for (flag, expected) in [("0", Flag::Ok), ("1", Flag::PowerFailure)] {
57    //         let parsed = Flag::from_str(flag).unwrap();
58
59    //         assert_eq!(parsed, expected);
60
61    //         let formatted = parsed.to_string();
62
63    //         assert_eq!(formatted, flag);
64    //     }
65    // }
66}