Initial Commit
This commit is contained in:
72
cmd/tafparser/main.go
Normal file
72
cmd/tafparser/main.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
|
||||
"github.com/alecthomas/repr"
|
||||
"github.com/spf13/pflag"
|
||||
"go.elara.ws/logger"
|
||||
"go.elara.ws/logger/log"
|
||||
"go.elara.ws/taf"
|
||||
"go.elara.ws/taf/units"
|
||||
)
|
||||
|
||||
func init() {
|
||||
log.Logger = logger.NewPretty(os.Stderr)
|
||||
}
|
||||
|
||||
func main() {
|
||||
pretty := pflag.BoolP("pretty", "p", true, "Pretty-print the JSON output")
|
||||
printGo := pflag.BoolP("print-go", "G", false, "Print Go code instead of JSON")
|
||||
convertDist := pflag.StringP("convert-distance", "d", "", "Convert all the distances to the given unit. (valid units: sm, mi, m)")
|
||||
convertSpd := pflag.StringP("convert-speed", "s", "", "Convert all the speeds to the given unit. (valid units: m/s, mps, kmh, kph, kt, kts)")
|
||||
pflag.Parse()
|
||||
|
||||
var opts taf.Options
|
||||
|
||||
if *convertDist != "" {
|
||||
d, ok := units.ParseDistance(*convertDist)
|
||||
if !ok {
|
||||
log.Fatal("Invalid distance unit").Send()
|
||||
}
|
||||
opts.DistanceUnit = d
|
||||
}
|
||||
|
||||
if *convertSpd != "" {
|
||||
s, ok := units.ParseSpeed(*convertSpd)
|
||||
if !ok {
|
||||
log.Fatal("Invalid speed unit").Send()
|
||||
}
|
||||
opts.SpeedUnit = s
|
||||
}
|
||||
|
||||
var fl *os.File
|
||||
var err error
|
||||
if pflag.NArg() > 0 {
|
||||
fl, err = os.Open(pflag.Arg(0))
|
||||
if err != nil {
|
||||
log.Fatal("Error opening file").Err(err).Send()
|
||||
}
|
||||
} else {
|
||||
fl = os.Stdin
|
||||
}
|
||||
|
||||
fc, err := taf.ParseWithOptions(fl, opts)
|
||||
if err != nil {
|
||||
log.Fatal("Error parsing TAF data").Err(err).Send()
|
||||
}
|
||||
|
||||
if *printGo {
|
||||
repr.Println(fc)
|
||||
} else {
|
||||
enc := json.NewEncoder(os.Stdout)
|
||||
if *pretty {
|
||||
enc.SetIndent("", " ")
|
||||
}
|
||||
err = enc.Encode(fc)
|
||||
if err != nil {
|
||||
log.Fatal("Error encoding forecast").Err(err).Send()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user