gnss_qc/report/rinex/
mod.rs1mod 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
25pub 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}