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}