Crates.io | igc_parser |
lib.rs | igc_parser |
version | 0.1.7 |
source | src |
created_at | 2023-04-16 20:12:57.295177 |
updated_at | 2024-09-09 15:57:13.660582 |
description | A high-level parsing/deserializing crate for IGC flight recorder files |
homepage | |
repository | https://github.com/LWEdslev/igc_parser |
max_upload_size | |
id | 840842 |
size | 411,452 |
A parsing crate for IGC flight recorder files. Features:
Result
typeRc<str>
and Arc<str>
for immutable string types to improve cloning efficiency compared to String
For additional information on the records use https://xp-soaring.github.io/igc_file_format/igc_format_2008.html
Use builder pattern to parse only specific kinds of records, this is more efficient than parsing everything
let file = fs::read_to_string("./examples/example.igc")?;
let builder = parser_builder::new_builder()
.parse_a_records()
.parse_e_records()
.parse_b_records();
let parsed = builder.on_file(&file)?;
// Then we can get the records we specified
let a_records = parsed.get_a_records();
let e_records = parsed.get_e_records();
let b_records = parsed.get_b_records();
// NOTE This below does not compile since our builder was not set to parse C records
// let c_records = parsed.get_c_records();
Parsing all fixes (B records)
let file = fs::read_to_string("./examples/example.igc")?;
let valid_fixes: Vec<Fix> = file
.lines()
.filter_map(|line| {
if let Record::B(fix) = Record::parse(line).ok()? {
Some(fix)
} else {
None
}
})
.collect();
println!("{}", valid_fixes.len());
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);
Parsing entire file and getting all valid fixes
let file = fs::read_to_string("./examples/example.igc")?;
let igc_file = IGCFile::parse(&file)?;
let valid_fixes: Vec<Fix> = igc_file
.get_fixes()
.clone()
.into_iter()
.filter_map(|fix| fix.ok())
.collect();
println!("{}", valid_fixes.len());
Option
sString
to Rc<str>
to allow more efficient cloningthread-safe
feature where the string types will be Arc<str>