6 releases
0.1.5 | Nov 19, 2023 |
---|---|
0.1.4 | May 16, 2023 |
0.1.2 | Apr 17, 2023 |
#608 in Rust patterns
30 downloads per month
135KB
1.5K
SLoC
IGC Parser
A high-level parsing crate for IGC flight recorder files.
With most focus on:
- Easy to use
- No run-time asserts meaning that any errors will be through the
Result
type - A panic free crate
You should use this crate if you want to easily, quickly and safely parse igc files.
For additional information on the records use https://xp-soaring.github.io/igc_file_format/igc_format_2008.html
Example: Series of records
Parsing all fixes (B records)
let file = fs::read_to_string("./examples/example.igc").unwrap().parse::<String>().unwrap();
let valid_fixes = file.lines().filter_map(|line| {
match Record::parse(line) {
Ok(Record::B(fix)) => Some(fix),
_ => None,
}
}).collect::<Vec<Fix>>();
println!("{}", valid_fixes.len())
Example: Single record
Parsing a single record (L record aka comment)
let comment = match Record::parse("LCOMMENTYCOMMENT").unwrap() {
Record::L(comment) => comment,
_ => panic!("This was not a comment")
};
println!("{}", comment.content);
Example: Entire file
Parsing entire file and getting all valid fixes
let file = fs::read_to_string("./examples/example.igc").unwrap().parse::<String>().unwrap();
let igc_file = IGCFile::parse(&file).unwrap();
let valid_fixes = igc_file.get_fixes().clone().into_iter()
.filter_map(|fix| match fix {
Ok(fix) => Some(fix),
Err(_) => None,
}).collect::<Vec<Fix>>();
println!("{}", valid_fixes.len())
Example: Specific kind of records
Use builder pattern to parse only specific kinds of records
use igc_parser::parser_builder::*;
use std::fs;
let file = fs::read_to_string("./examples/example.igc").unwrap().parse::<String>().unwrap();
let builder = ParserBuilder::new().parse_fixes().parse_comments().parse_task_info();
let parsed = builder.on_file(&file).unwrap();
let fixes = parsed.get_fixes();
New in 0.1.5
- Serde feature (use feature flag
serde
) - Errors now implement
std::error::Error
throughthiserror
Dependencies
~0.4–1MB
~21K SLoC