forked from davetemplin/bigboy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
flags.go
88 lines (73 loc) · 1.94 KB
/
flags.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package main
import (
"flag"
"fmt"
"os"
)
// Args ...
type Args struct {
errors uint64
nulls bool
out string
page int
params []string
quiet bool
retries uint64
target string
workers int
}
// Flags - Command Line Arguments
type Flags struct {
Args
config string
version bool
}
var args Args
func setFlags(flags *flag.FlagSet, c *Config, f *Flags) {
flags.StringVar(&f.config, "c", defaultConfig, "Bigboy conifg file path")
flags.Uint64Var(&f.errors, "e", c.Errors, "max errors allowed")
flags.BoolVar(&f.nulls, "n", c.Nulls, "Include nulls in output")
flags.StringVar(&f.out, "o", "", "Output file or directory")
flags.IntVar(&f.page, "p", c.Page, "Rows extracted per query")
flags.BoolVar(&f.quiet, "q", c.Quiet, "Supress informational output")
flags.Uint64Var(&f.retries, "r", c.Retries, "max consecutive errors")
flags.BoolVar(&f.version, "v", false, "Print version info about bigboy and exit")
flags.IntVar(&f.workers, "w", c.Workers, "# of workers")
}
func getFlagsUsage(f *flag.FlagSet) func() {
return func() {
fmt.Println("usage: bigboy [options] target [params]")
fmt.Println()
f.PrintDefaults()
}
}
func parseFlags(progname string, input []string, c *Config) (*Flags, func()) {
var flags *flag.FlagSet = flag.NewFlagSet(progname, flag.ContinueOnError)
var f Flags
setFlags(flags, c, &f)
var flagsUsage func() = getFlagsUsage(flags)
flags.Usage = flagsUsage
err := flags.Parse(input)
if err != nil {
fmt.Println("Error reading arguments", err)
os.Exit(0)
}
return &f, flagsUsage
}
func parseArgs(progname string, input []string, c *Config) *Args {
var flags *flag.FlagSet = flag.NewFlagSet(progname, flag.ContinueOnError)
var f Flags
setFlags(flags, c, &f)
err := flags.Parse(input)
if err != nil {
fmt.Println("Error reading arguments", err)
os.Exit(0)
}
allArgs := flags.Args()
if len(allArgs) == 0 {
return &f.Args
}
f.target = allArgs[0]
f.params = allArgs[1:]
return &f.Args
}