1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
use std::fmt;
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum StationError {
IncorrectLength,
NonAlphabeticCharacter,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum ObservationTimeError {
IncorrectLength,
DateNotValid,
HourNotValid,
MinuteNotValid,
InvalidTimeZone,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum WindError {
IncorrectLength,
HeadingNotValid,
SpeedNotValid,
GustingNotValid,
UnitNotValid,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum WindVaryingError {
HeadingNotValid,
NotWindVarying,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum CloudVisibilityError {
UnknownData,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum TemperatureError {
TemperatureNotValid,
DewpointNotValid,
NotTemperatureDewpointPair,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum PressureError {
PressureNotValid,
UnitNotValid,
}
impl fmt::Display for StationError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::IncorrectLength => write!(f, "The station ID was not the correct length."),
Self::NonAlphabeticCharacter => write!(f, "Found a non-alphabetic character."),
}
}
}
impl fmt::Display for ObservationTimeError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::IncorrectLength => write!(f, "The observation time was not the correct length."),
Self::DateNotValid => write!(f, "The date was invalid."),
Self::HourNotValid => write!(f, "The hour was invalid."),
Self::MinuteNotValid => write!(f, "The minute was invalid."),
Self::InvalidTimeZone => write!(f, "The time zone was invalid (not Zulu)."),
}
}
}
impl fmt::Display for WindError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::IncorrectLength => write!(f, "The length of the wind information is incorrect."),
Self::HeadingNotValid => write!(f, "The heading is invalid."),
Self::SpeedNotValid => write!(f, "The speed is invalid."),
Self::GustingNotValid => write!(f, "The gusting speed is invalid."),
Self::UnitNotValid => write!(f, "The unit is not valid."),
}
}
}
impl fmt::Display for WindVaryingError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::HeadingNotValid => write!(f, "The heading is invalid."),
Self::NotWindVarying => unreachable!(),
}
}
}
impl fmt::Display for CloudVisibilityError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::UnknownData => write!(f, "Unknown data for parsing."),
}
}
}
impl fmt::Display for TemperatureError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::TemperatureNotValid => write!(f, "The temperature is invalid."),
Self::DewpointNotValid => write!(f, "The dewpoint is invalid."),
Self::NotTemperatureDewpointPair => unreachable!(),
}
}
}
impl fmt::Display for PressureError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::PressureNotValid => write!(f, "The pressure is invalid."),
Self::UnitNotValid => write!(f, "The unit is invalid."),
}
}
}