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#[derive(Clone, Debug, PartialEq)]
17#[cfg_attr(feature = "serde", derive(Serialize))]
18pub enum Record {
19 AntexRecord(AntexRecord),
21
22 ClockRecord(ClockRecord),
24
25 MeteoRecord(MeteoRecord),
27
28 NavRecord(NavRecord),
30
31 ObsRecord(ObservationRecord),
33
34 DorisRecord(DorisRecord),
36}
37
38pub type Comments = BTreeMap<Epoch, Vec<String>>;
42
43impl Record {
44 pub fn as_antex(&self) -> Option<&AntexRecord> {
46 match self {
47 Record::AntexRecord(r) => Some(r),
48 _ => None,
49 }
50 }
51
52 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 pub fn as_clock(&self) -> Option<&ClockRecord> {
62 match self {
63 Record::ClockRecord(r) => Some(r),
64 _ => None,
65 }
66 }
67
68 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 pub fn as_meteo(&self) -> Option<&MeteoRecord> {
78 match self {
79 Record::MeteoRecord(r) => Some(r),
80 _ => None,
81 }
82 }
83
84 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 pub fn as_nav(&self) -> Option<&NavRecord> {
94 match self {
95 Record::NavRecord(r) => Some(r),
96 _ => None,
97 }
98 }
99
100 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 pub fn as_obs(&self) -> Option<&ObservationRecord> {
110 match self {
111 Record::ObsRecord(r) => Some(r),
112 _ => None,
113 }
114 }
115
116 pub fn as_mut_obs(&mut self) -> Option<&mut ObservationRecord> {
118 match self {
119 Record::ObsRecord(r) => Some(r),
120 _ => None,
121 }
122 }
123 pub fn as_doris(&self) -> Option<&DorisRecord> {
125 match self {
126 Record::DorisRecord(r) => Some(r),
127 _ => None,
128 }
129 }
130
131 pub fn as_mut_doris(&mut self) -> Option<&mut DorisRecord> {
133 match self {
134 Record::DorisRecord(r) => Some(r),
135 _ => None,
136 }
137 }
138}