rinex/
error.rs

1use thiserror::Error;
2
3use gnss_rs::{
4    constellation::ParsingError as ConstellationParsingError, cospar::Error as CosparParsingError,
5    domes::Error as DOMESParsingError, sv::ParsingError as SVParsingError,
6};
7
8use hifitime::{HifitimeError, ParsingError as HifitimeParsingError};
9
10use std::io::Error as IoError;
11
12use crate::hatanaka::Error as HatanakaError;
13
14/// Errors that may rise in Parsing process
15#[derive(Debug, Error)]
16pub enum ParsingError {
17    #[error("header line too short (invalid)")]
18    HeaderLineTooShort,
19    #[error("empty epoch")]
20    EmptyEpoch,
21    #[error("invalid epoch flag")]
22    EpochFlag,
23    #[error("number of sat")]
24    NumSat,
25    #[error("marker type")]
26    MarkerType,
27    #[error("nav: clock parsing")]
28    ClockParsing,
29    #[error("invalid epoch format")]
30    EpochFormat,
31    #[error("epoch parsing")]
32    EpochParsing,
33    #[error("datime parsing")]
34    DatetimeParsing,
35    #[error("datime invalid format")]
36    DatetimeFormat,
37    #[error("bad rinex revision format")]
38    VersionFormat,
39    #[error("rinex revision parsing")]
40    VersionParsing,
41    #[error("rinex format identification")]
42    TypeParsing,
43    #[error("observable parsing")]
44    ObservableParsing,
45    #[error("constellation parsing")]
46    ConstellationParsing(#[from] ConstellationParsingError),
47    #[error("undefined constellation: bad header?")]
48    UndefinedConstellation,
49    #[error("sv parsing")]
50    SVParsing(#[from] SVParsingError),
51    #[error("cospar parsing")]
52    COSPAR(#[from] CosparParsingError),
53    #[error("nav: eop missing line")]
54    EopMissingData,
55    #[error("clock TYPE OF DATA parsing")]
56    ClockTypeofData,
57    #[error("OBS RINEX invalid timescale")]
58    BadObsBadTimescaleDefinition,
59    #[error("bad RINEX: missing timescale specs")]
60    NoTimescaleDefinition,
61    #[error("SYS / SCALE FACTOR parsing")]
62    SystemScalingFactor,
63    #[error("REF CLOCK OFFS parsing")]
64    RcvClockOffsApplied,
65    #[error("header coordinates parsing")]
66    Coordinates,
67    #[error("antenna coordinates parsing")]
68    AntennaCoordinates,
69    #[error("sensor coordinates parsing")]
70    SensorCoordinates,
71    #[error("ANTEX version parsing")]
72    AntexVersion,
73    #[error("IONEX version parsing")]
74    IonexVersion,
75    #[error("invalid ionex referencing")]
76    IonexReferenceSystem,
77    #[error("non supported rinex revision")]
78    NonSupportedVersion,
79    #[error("invalid mapping function")]
80    IonexMappingFunction,
81    #[error("unknown / non supported observable")]
82    UnknownObservable,
83    #[error("invalid observable")]
84    BadObservable,
85    #[error("invalid leap second specs")]
86    LeapFormat,
87    #[error("leap second parsing")]
88    LeapParsing,
89    #[error("hifitime parsing")]
90    HifitimeParsing(#[from] HifitimeParsingError),
91    #[error("hifitime error")]
92    Hifitime(#[from] HifitimeError),
93    #[error("DORIS L1/L2 date offset")]
94    DorisL1L2DateOffset,
95    #[error("DORIS L1/L2 date offset")]
96    NumberOfCalibratedAntennasParsing,
97    #[error("antex: antenna calibration #")]
98    AntexAntennaCalibrationNumber,
99    #[error("antex: apc coordinates")]
100    AntexAPCCoordinates,
101    #[error("antex: zenith grid")]
102    AntexZenithGrid,
103    #[error("antex: frequency")]
104    AntexFrequency,
105    #[error("doris: invalid station format")]
106    DorisStationFormat,
107    #[error("doris: station parsing")]
108    DorisStation,
109    #[error("obs/doris: missing observable specs")]
110    MissingObservableDefinition,
111    #[error("clock profile type parsing")]
112    ClockProfileType,
113    #[error("clock profile parsing")]
114    ClockProfile,
115    #[error("DOMES parsing")]
116    DOMES(#[from] DOMESParsingError),
117    #[error("ionex: map index parsing")]
118    IonexMapIndex,
119    #[error("ionex: grid specs parsing")]
120    IonexGridSpecs,
121    #[error("ionex: invalid grid specs")]
122    BadIonexGridSpecs,
123    #[error("ionex: map coordinates parsing")]
124    IonexGridCoordinates,
125    #[error("nav: invalid frame class")]
126    NavFrameClass,
127    #[error("nav: invalid timescale")]
128    NavInvalidTimescale,
129    #[error("nav: invalid message type")]
130    NavMsgType,
131    #[error("nav: (ref) epoch week counter parsing")]
132    NavEpochWeekCounter,
133    #[error("nav: time offset parsing")]
134    NavTimeOffsetParinsg,
135    #[error("nav: unknown radio message")]
136    NoNavigationDefinition,
137    #[error("nav: invalid health flag definition")]
138    NavHealthFlagDefinition,
139    #[error("nav: invalid bitfield")]
140    NavFlagsMapping,
141    #[error("nav: invalid data source flag definition")]
142    NavDataSourceDefinition,
143    #[error("nav: unknown complex type")]
144    NavUnknownComplexType,
145    #[error("nav: invalid / missing flag definition")]
146    NavFlagsDefinition,
147    #[error("nav: illegal null orbit field")]
148    NavNullOrbit,
149    #[error("nav:ion klobuchar data")]
150    KlobucharData,
151    #[error("nav:ion nequick-g data")]
152    NequickGData,
153    #[error("nav:ion bdgim data")]
154    BdgimData,
155    #[error("nav:sto data")]
156    SystemTimeData,
157    #[error("ionex: earth obs sat")]
158    IonexEarthObservationSat,
159    #[error("ionex: model")]
160    IonexModel,
161    #[error("antex: calibration method")]
162    AntexCalibrationMethod,
163    #[error("obs: hardware events not supported yet")]
164    ObsHardwareEvent,
165    #[error("obs: bad v2 satellites description")]
166    BadV2SatellitesDescription,
167    #[error("obs: numsat parsing")]
168    NumSatParsing,
169    #[error("CRINEX error: {0}")]
170    CRINEX(HatanakaError),
171    #[error("bad utf-8 generated by CRINEX recovering process")]
172    BadUtf8Crinex,
173    #[error("doris station identification")]
174    DorisStationIdentification,
175    #[error("doris sat clock parsing")]
176    DorisClockParsing,
177    #[error("ionex scaling exponent")]
178    IonexScalingExponent,
179}
180
181/// Errors that may rise in Formatting process
182#[derive(Error, Debug)]
183pub enum FormattingError {
184    #[error("i/o: output error")]
185    OutputError(#[from] IoError),
186    #[error("missing constellation information")]
187    NoConstellationDefinition,
188    #[error("missing navigation standard specs")]
189    MissingNavigationStandards,
190    #[error("undefined observables")]
191    UndefinedObservables,
192    #[error("missing observable definition")]
193    MissingObservableDefinition,
194    #[error("nav: unknown radio message")]
195    NoNavigationDefinition,
196    #[error("nav: missing grid defs")]
197    NoGridDefinition,
198}
199
200/// General error (processing, analysis..)
201#[derive(Debug)]
202pub enum Error {
203    /// Invalid frequency
204    InvalidFrequency,
205
206    /// Sampling Period is not determined
207    UndeterminedSamplingPeriod,
208
209    /// Unknown frequency
210    UnknownFrequency,
211
212    /// Non supported GPS [Observable]
213    UnknownGPSObservable,
214
215    /// Non supported Galileo [Observable]
216    UnknownGalieoObservable,
217
218    /// Non supported Glonass [Observable]
219    UnknownGlonassObservable,
220
221    /// Non supported QZSS [Observable]
222    UnknownQZSSObservable,
223
224    /// Non supported BDS [Observable]
225    UnknownBeiDouObservable,
226
227    /// Non supported IRNSS [Observable]
228    UnknownIRNSSObservable,
229
230    /// Non supported SBAS [Observable]
231    UnknownSBASObservable,
232
233    /// Non supported DORIS [Observable]
234    UnknownDORISObservable,
235
236    /// Unknown GPS Frequency
237    UnknownGPSFrequency,
238
239    /// Unknown Galileo Frequency
240    UnknownGalileoFrequency,
241
242    /// Unknown QZSS Frequency
243    UnknownQzssFrequency,
244
245    /// Unknown Glonass Frequency
246    UnknownGlonassFrequency,
247
248    /// Unknown BDS Frequency
249    UnknownBDSFrequency,
250
251    /// Unknown IRNSS Frequency
252    UnknownIRNSSFrequency,
253
254    /// Unknown SBAS Frequency
255    UnknownSBASFrequency,
256
257    /// Unknown DORIS Frequency
258    UnknownDORISFrequency,
259}