Skip to content

Commit 5b4109c

Browse files
authored
Merge pull request #145 from Tosainu/make-GllData-fix_time-optional
Make `GllData.fix_time` optional
2 parents 0f69998 + 3de3bce commit 5b4109c

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

src/parser.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ impl<'a> Nmea {
222222
fn merge_gll_data(&mut self, gll: GllData) {
223223
self.latitude = gll.latitude;
224224
self.longitude = gll.longitude;
225-
self.fix_time = Some(gll.fix_time);
225+
self.fix_time = gll.fix_time;
226226
if let Some(faa_mode) = gll.faa_mode {
227227
self.fix_type = Some(faa_mode.into());
228228
} else {
@@ -359,7 +359,7 @@ impl<'a> Nmea {
359359
self.sentences_for_this_time.insert(SentenceType::GGA);
360360
}
361361
ParseResult::GLL(gll_data) => {
362-
if !self.update_fix_time(Some(gll_data.fix_time)) {
362+
if !self.update_fix_time(gll_data.fix_time) {
363363
return Ok(FixType::Invalid);
364364
}
365365
self.merge_gll_data(gll_data);

src/sentences/gll.rs

+9-4
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ pub struct GllData {
3535
pub latitude: Option<f64>,
3636
pub longitude: Option<f64>,
3737
#[cfg_attr(feature = "defmt-03", defmt(Debug2Format))]
38-
pub fix_time: NaiveTime,
38+
pub fix_time: Option<NaiveTime>,
3939
pub valid: bool,
4040
pub faa_mode: Option<FaaMode>,
4141
}
@@ -69,7 +69,7 @@ pub fn parse_gll(sentence: NmeaSentence) -> Result<GllData, Error> {
6969
fn do_parse_gll(i: &str) -> IResult<&str, GllData> {
7070
let (i, lat_lon) = parse_lat_lon(i)?;
7171
let (i, _) = char(',')(i)?;
72-
let (i, fix_time) = parse_hms(i)?;
72+
let (i, fix_time) = opt(parse_hms)(i)?;
7373
let (i, _) = char(',')(i)?;
7474
let (i, valid) = one_of("AV")(i)?; // A: valid, V: invalid
7575
let valid = match valid {
@@ -120,16 +120,21 @@ mod tests {
120120
assert_relative_eq!(gll_data.longitude.unwrap(), -(114.0 + (2.3279144 / 60.0)));
121121
assert_eq!(
122122
gll_data.fix_time,
123-
NaiveTime::from_hms_milli_opt(20, 54, 12, 0).expect("invalid time")
123+
Some(NaiveTime::from_hms_milli_opt(20, 54, 12, 0).expect("invalid time"))
124124
);
125125
assert_eq!(gll_data.faa_mode, Some(FaaMode::Autonomous));
126126

127127
let s = parse("$GNGLL,,,,,181604.00,V,N*5E", 0x5e);
128128
let gll_data = parse_gll(s).unwrap();
129129
assert_eq!(
130-
NaiveTime::from_hms_milli_opt(18, 16, 4, 0).expect("invalid time"),
130+
Some(NaiveTime::from_hms_milli_opt(18, 16, 4, 0).expect("invalid time")),
131131
gll_data.fix_time
132132
);
133133
assert!(!gll_data.valid);
134+
135+
let s = parse("$GNGLL,,,,,,V,N*7A", 0x7a);
136+
let gll_data = parse_gll(s).unwrap();
137+
assert_eq!(gll_data.fix_time, None);
138+
assert!(!gll_data.valid);
134139
}
135140
}

0 commit comments

Comments
 (0)