rinex/record/
mod.rs

1use crate::{
2    antex::Record as AntexRecord, clock::Record as ClockRecord, doris::Record as DorisRecord,
3    meteo::Record as MeteoRecord, navigation::Record as NavRecord,
4    observation::Record as ObservationRecord, prelude::Epoch,
5};
6
7use std::collections::BTreeMap;
8
9#[cfg(feature = "serde")]
10use serde::Serialize;
11
12mod formatting;
13mod parsing;
14
15/// RINEX [Record] type, inner content is RINEX type dependent.
16#[derive(Clone, Debug, PartialEq)]
17#[cfg_attr(feature = "serde", derive(Serialize))]
18pub enum Record {
19    /// [AntexRecord] contains antenna calibration profile
20    AntexRecord(AntexRecord),
21
22    /// [ClockRecord] contains SV and ground clock states
23    ClockRecord(ClockRecord),
24
25    /// Meteo sensor observations, stored as [MeteoRecord]
26    MeteoRecord(MeteoRecord),
27
28    /// Navigation messages stored as [NavRecord]
29    NavRecord(NavRecord),
30
31    /// Observation record: signals observation
32    ObsRecord(ObservationRecord),
33
34    /// DORIS RINEX, special observations
35    DorisRecord(DorisRecord),
36}
37
38/// Record comments are high level informations, sorted by epoch
39/// (timestamp) of appearance. We deduce the "associated" timestamp from the
40/// previosuly parsed epoch, when parsing the record.
41pub type Comments = BTreeMap<Epoch, Vec<String>>;
42
43impl Record {
44    /// [AntexRecord] unwrapping attempt.
45    pub fn as_antex(&self) -> Option<&AntexRecord> {
46        match self {
47            Record::AntexRecord(r) => Some(r),
48            _ => None,
49        }
50    }
51
52    /// Mutable [AntexRecord] unwrapping attempt.
53    pub fn as_mut_antex(&mut self) -> Option<&mut AntexRecord> {
54        match self {
55            Record::AntexRecord(r) => Some(r),
56            _ => None,
57        }
58    }
59
60    /// [ClockRecord] unwrapping attempt.
61    pub fn as_clock(&self) -> Option<&ClockRecord> {
62        match self {
63            Record::ClockRecord(r) => Some(r),
64            _ => None,
65        }
66    }
67
68    /// Mutable [ClockRecord] unwrapping attempt.
69    pub fn as_mut_clock(&mut self) -> Option<&mut ClockRecord> {
70        match self {
71            Record::ClockRecord(r) => Some(r),
72            _ => None,
73        }
74    }
75
76    /// [MeteoRecord] unwrapping attempt.
77    pub fn as_meteo(&self) -> Option<&MeteoRecord> {
78        match self {
79            Record::MeteoRecord(r) => Some(r),
80            _ => None,
81        }
82    }
83
84    /// Mutable [MeteoRecord] unwrapping attempt.
85    pub fn as_mut_meteo(&mut self) -> Option<&mut MeteoRecord> {
86        match self {
87            Record::MeteoRecord(r) => Some(r),
88            _ => None,
89        }
90    }
91
92    /// [NavRecord] unwrapping attempt.
93    pub fn as_nav(&self) -> Option<&NavRecord> {
94        match self {
95            Record::NavRecord(r) => Some(r),
96            _ => None,
97        }
98    }
99
100    /// Mutable [NavRecord] unwrapping attempt.
101    pub fn as_mut_nav(&mut self) -> Option<&mut NavRecord> {
102        match self {
103            Record::NavRecord(r) => Some(r),
104            _ => None,
105        }
106    }
107
108    /// [ObservationRecord] unwrapping attempt.
109    pub fn as_obs(&self) -> Option<&ObservationRecord> {
110        match self {
111            Record::ObsRecord(r) => Some(r),
112            _ => None,
113        }
114    }
115
116    /// Mutable [ObservationRecord] unwrapping attempt.
117    pub fn as_mut_obs(&mut self) -> Option<&mut ObservationRecord> {
118        match self {
119            Record::ObsRecord(r) => Some(r),
120            _ => None,
121        }
122    }
123    /// [DorisRecord] unwrapping attempt.
124    pub fn as_doris(&self) -> Option<&DorisRecord> {
125        match self {
126            Record::DorisRecord(r) => Some(r),
127            _ => None,
128        }
129    }
130
131    /// Mutable [DorisRecord] unwrapping attempt.
132    pub fn as_mut_doris(&mut self) -> Option<&mut DorisRecord> {
133        match self {
134            Record::DorisRecord(r) => Some(r),
135            _ => None,
136        }
137    }
138}