A nmea-0183 sentence parser written in Rust using Nom.
use nmea_0183::sentence::parse;
fn main() {
// We first need a sentence to parse.
// According to the NMEA-0183 specification, a sentence ends with <CR><LF>
let raw_sentence = "$GPGGA,092725.00,4717.11399,N,00833.91590,E,1,08,1.01,499.6,M,48.0,M,,*5B\r\n";
let parsed_sentence = parse(raw_sentence)
.expect("Could not parse nmea sentence.");
println!("{:?}", parsed_sentence);
/*
Sentence {
sentence_type: Parametric,
talker: GPS,
message: GGA(GGAMessage {
time: Some(09:27:25),
lat: Some(Degree(47.1711399)),
ns: North,
lon: Some(Degree(8.339159)),
ew: East,
quality: AutonomousGNSSFix,
num_sv: Some(8),
hdop: Some(1.01),
alt: Some(Meter(499.6)),
sep: Some(Meter(48.0)),
diff_age: None,
diff_station: None
})
}
*/
}
The parser is at an early stage, I have written it by following the U-Blox Receiver Protcol Specification and interpreting it as well as I could.
I have written unit tests based on the provided samples, but I don't have any receiver yet to test the output.
If you would like to improve it, or if you find a (one of many!) bug please open an issue or, even better, submit a pull request :)
If you use cargo-edit (which I recommend), open a shell in the project you want to add the library to and run the following command:
$ cargo add nmea-0183
Adding nmea-0183 v0.0.2 to dependencies
If you don't, add the library to your Cargo.toml dependencies:
[dependencies]
nmea-0183 = "*"
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Dual MIT/Apache2 is strictly more permissive