///|
fn print_usage() -> Unit {
println("MoonAeroWx - aviation weather report parser")
println("")
println("Usage:")
println(" aerowx decode ")
println(" aerowx decode-json ")
println(" aerowx decode-csv ")
println(" aerowx decode-md ")
println(" aerowx validate ")
println(" aerowx timeline ")
println(" aerowx batch ")
println(" aerowx batch-csv ")
}
///|
fn[T] print_diagnostics(result : @lib.ParseResult[T]) -> Unit {
for diagnostic in result.diagnostics {
println(diagnostic.to_string())
}
}
///|
fn main {
let args = @env.args()
if args.length() < 2 {
print_usage()
return
}
match args[1] {
"help" | "--help" | "-h" => print_usage()
"decode" => {
if args.length() < 3 {
println("error: expected METAR text")
return
}
let result = @lib.parse_metar(args[2])
print_diagnostics(result)
match result.value {
Some(report) => println(@lib.metar_to_summary(report))
None => ()
}
}
"decode-json" => {
if args.length() < 3 {
println("error: expected METAR text")
return
}
let result = @lib.parse_metar(args[2])
if result.has_errors() {
print_diagnostics(result)
}
match result.value {
Some(report) => println(@lib.metar_to_json(report))
None => ()
}
}
"decode-csv" => {
if args.length() < 3 {
println("error: expected METAR text")
return
}
let result = @lib.parse_metar(args[2])
if result.has_errors() {
print_diagnostics(result)
}
match result.value {
Some(report) => println(@lib.metar_to_csv(report))
None => ()
}
}
"decode-md" => {
if args.length() < 3 {
println("error: expected METAR text")
return
}
let result = @lib.parse_metar(args[2])
if result.has_errors() {
print_diagnostics(result)
}
match result.value {
Some(report) => println(@lib.metar_to_markdown(report))
None => ()
}
}
"timeline" => {
if args.length() < 3 {
println("error: expected TAF text")
return
}
let result = @lib.parse_taf(args[2])
print_diagnostics(result)
match result.value {
Some(report) => println(@lib.taf_timeline_to_summary(report))
None => ()
}
}
"batch" | "batch-md" => {
if args.length() < 3 {
println("error: expected newline-delimited METAR text")
return
}
println(@lib.metar_batch_to_markdown(args[2]))
}
"batch-csv" => {
if args.length() < 3 {
println("error: expected newline-delimited METAR text")
return
}
println(@lib.metar_batch_to_csv(args[2]))
}
"validate" => {
if args.length() < 3 {
println("error: expected METAR text")
return
}
let result = @lib.parse_metar(args[2])
print_diagnostics(result)
if result.has_errors() {
println("invalid")
} else {
println("valid")
}
}
command => {
println("error: unknown command '\{command}'")
print_usage()
}
}
}