///|
fn fragment(number : Int, ids : Array[String]) -> @nmea.GsvRecord {
let fields = ["2", number.to_string(), "5"]
for id in ids {
fields.push(id)
fields.push("20")
fields.push("100")
fields.push("35")
}
fields.push("1")
@nmea.parse_gsv(@nmea.NmeaFrame::new(36, "GP", "GSV", fields)).unwrap()
}
///|
fn main {
let assembler = @nmea.GsvAssembler::new()
guard assembler.push(fragment(1, ["01", "02", "03", "04"]), record_index=0) ==
Ok(None) else {
abort("first fragment should remain pending")
}
let assembly = assembler
.push(fragment(2, ["05"]), record_index=1)
.unwrap()
.unwrap()
guard @nmea.validate_gsv_integrity(assembly).length() == 0 else {
abort("assembled GSV evidence is inconsistent")
}
println(
"satellites=" +
assembly.total_satellites().to_string() +
" fragments=" +
assembly.total_messages().to_string(),
)
}