package main import ( "encoding/json" "flag" "fmt" "os" "gitea.dohertylan.com/dohertj2/mxaccessgw/clients/go/mxgateway" ) type versionOutput struct { ClientVersion string `json:"clientVersion"` GatewayProtocolVersion uint32 `json:"gatewayProtocolVersion"` WorkerProtocolVersion uint32 `json:"workerProtocolVersion"` } func main() { if err := run(os.Args[1:]); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(2) } } func run(args []string) error { if len(args) == 0 { return fmt.Errorf("usage: mxgw-go version [-json]") } switch args[0] { case "version": return runVersion(args[1:]) default: return fmt.Errorf("unknown command %q", args[0]) } } func runVersion(args []string) error { flags := flag.NewFlagSet("version", flag.ContinueOnError) flags.SetOutput(os.Stderr) jsonOutput := flags.Bool("json", false, "write JSON output") if err := flags.Parse(args); err != nil { return err } output := versionOutput{ ClientVersion: mxgateway.ClientVersion, GatewayProtocolVersion: mxgateway.GatewayProtocolVersion, WorkerProtocolVersion: mxgateway.WorkerProtocolVersion, } if *jsonOutput { encoder := json.NewEncoder(os.Stdout) encoder.SetIndent("", " ") return encoder.Encode(output) } fmt.Fprintf(os.Stdout, "mxgw-go %s\n", output.ClientVersion) fmt.Fprintf(os.Stdout, "gateway protocol %d\n", output.GatewayProtocolVersion) fmt.Fprintf(os.Stdout, "worker protocol %d\n", output.WorkerProtocolVersion) return nil }