-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathargs.go
More file actions
74 lines (69 loc) · 1.46 KB
/
args.go
File metadata and controls
74 lines (69 loc) · 1.46 KB
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package args
import (
"strconv"
"strings"
)
type Args struct {
Help bool
Verbose bool
UseStdin bool
CfgFile string
}
func ParseArgs(args []string, defaultCfgFile string, swflags map[string]bool) (*Args, []string) {
result := &Args{}
filteredArgs := []string{}
for i := 0; i < len(args); i++ {
arg := args[i]
if strings.HasPrefix(arg, "-") {
switch arg {
case "-h", "--help":
result.Help = true
continue
case "-v":
result.Verbose = true
continue
case "-":
result.UseStdin = true
continue
default:
if hasArg, ok := swflags[arg]; ok {
if hasArg {
filteredArgs = append(filteredArgs, arg)
for i+1 < len(args) && !strings.HasPrefix(args[i+1], "-") {
filteredArgs = append(filteredArgs, args[i+1])
i++
}
continue
}
}
filteredArgs = append(filteredArgs, arg)
}
} else if result.CfgFile == "" {
result.CfgFile = arg
} else {
filteredArgs = append(filteredArgs, arg)
}
}
if result.CfgFile == "" {
result.CfgFile = defaultCfgFile
}
return result, filteredArgs
}
func BoolArg(arg string, defaultValue bool) bool {
parts := strings.SplitN(arg, "=", 2)
if len(parts) != 2 {
return defaultValue
}
value, err := strconv.ParseBool(parts[1])
if err != nil {
return defaultValue
}
return value
}
func StringArg(arg string, defaultValue string) string {
parts := strings.SplitN(arg, "=", 2)
if len(parts) != 2 {
return defaultValue
}
return parts[1]
}