gnss_qc/report/rinex/
mod.rs

1mod obs;
2use obs::Report as ObsReport;
3
4mod clock;
5use clock::ClkReport;
6
7mod doris;
8use doris::DorisReport;
9
10mod meteo;
11use meteo::MeteoReport;
12
13mod ionex;
14use ionex::IonexReport;
15
16mod nav;
17use nav::NavReport;
18
19use crate::report::Error;
20
21use maud::Markup;
22
23use rinex::prelude::{Rinex, RinexType};
24
25/// RINEX type dependent report
26pub enum RINEXReport {
27    Obs(ObsReport),
28    Nav(NavReport),
29    Clk(ClkReport),
30    Meteo(MeteoReport),
31    Doris(DorisReport),
32    Ionex(IonexReport),
33}
34
35impl RINEXReport {
36    pub fn new(rnx: &Rinex) -> Result<Self, Error> {
37        match rnx.header.rinex_type {
38            RinexType::DORIS => Ok(Self::Doris(DorisReport::new(rnx))),
39            RinexType::ClockData => Ok(Self::Clk(ClkReport::new(rnx)?)),
40            RinexType::MeteoData => Ok(Self::Meteo(MeteoReport::new(rnx)?)),
41            RinexType::NavigationData => Ok(Self::Nav(NavReport::new(rnx))),
42            RinexType::ObservationData => Ok(Self::Obs(ObsReport::new(rnx))),
43            RinexType::IonosphereMaps => Ok(Self::Ionex(IonexReport::new(rnx)?)),
44            _ => Err(Error::NonSupportedRINEX),
45        }
46    }
47    pub fn html_inline_menu_bar(&self) -> Markup {
48        match self {
49            Self::Obs(report) => report.html_inline_menu_bar(),
50            Self::Nav(report) => report.html_inline_menu_bar(),
51            Self::Clk(report) => report.html_inline_menu_bar(),
52            Self::Meteo(report) => report.html_inline_menu_bar(),
53            Self::Doris(report) => report.html_inline_menu_bar(),
54            Self::Ionex(report) => report.html_inline_menu_bar(),
55        }
56    }
57}