-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathflagparser.go
51 lines (44 loc) · 998 Bytes
/
flagparser.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package run
import (
"flag"
"fmt"
"os"
"strings"
"github.com/itzg/go-flagsfiller"
)
// FlagParser parses flags and env vars and returns a runner config and options.
func FlagParser[Option, RunnerCfg any]() (
runnerConfig RunnerCfg, option Option, err error,
) {
// create a FlagSetFiller
filler := flagsfiller.New(
flagsfiller.WithEnv(""),
flagsfiller.WithFieldRenamer(
func(name string) string {
repl := strings.ReplaceAll(name, "-", ".")
return strings.ToLower(repl)
},
),
)
err = filler.Fill(flag.CommandLine, &option)
if err != nil {
return runnerConfig, option, err
}
err = filler.Fill(flag.CommandLine, &runnerConfig)
if err != nil {
return runnerConfig, option, err
}
flag.Usage = usage
flag.Parse()
return runnerConfig, option, nil
}
func usage() {
fs := flag.NewFlagSet(os.Args[0], flag.ExitOnError)
out := fs.Output()
fmt.Fprint(
out,
"Nextmv Hybrid Optimization Platform\n",
)
fmt.Fprint(out, "Usage:\n")
flag.PrintDefaults()
}