...
1package main
2
3import (
4 "flag"
5 "fmt"
6 "strings"
7)
8
9func DebugFlag(name string) *debugFlag {
10 res := &debugFlag{name: name}
11 helptext := fmt.Sprintf("Enable debug mode for \"%s\"", name)
12 flag.Var(res, "debug_"+name, helptext)
13 return res
14}
15
16type debugFlag struct {
17 name string
18 value bool
19 isset bool
20}
21
22func (t *debugFlag) Set(s string) error {
23 x := strings.ToLower(s)
24 if x == "true" || x == "on" {
25 t.value = true
26 } else if x == "false" || x == "off" {
27 t.value = false
28 } else {
29 return fmt.Errorf("value \"%s\" not valid for a boolean value", s)
30 }
31 t.isset = true
32 return nil
33}
34func (t *debugFlag) String() string {
35 if t == nil {
36 return "debugflag description"
37 }
38 if !t.isset {
39 return "undefined"
40 }
41 return fmt.Sprintf("%v", t.value)
42}
43func (t *debugFlag) Value() string {
44 return fmt.Sprintf("%v", t.value)
45}
46func (t *debugFlag) IsBoolFlag() bool {
47 return true
48}
49
50func (t *debugFlag) IsSet() bool {
51 return t.isset
52}
53func (t *debugFlag) BoolValue() bool {
54 return t.value
55
56}
57
58func (t *debugFlag) Printf(format string, args ...any) {
59 prefix := fmt.Sprintf("[%s] ", t.name)
60 txt := fmt.Sprintf(format, args...)
61 fmt.Print(prefix + txt)
62}
63func (t *debugFlag) Debugf(format string, args ...any) {
64 if !t.value {
65 return
66 }
67 t.Printf(format, args...)
68}
View as plain text