...
1 package utils
2
3 import (
4 "flag"
5 "fmt"
6 "strings"
7 )
8
9 var (
10 tribool tribool_t
11 )
12
13 func Tribool(name, help string) *tribool_t {
14 t := &tribool_t{name: name, help: help}
15 flag.Var(t, name, help)
16 return t
17 }
18
19 type tribool_t struct {
20 name string
21 help string
22 isset bool
23 value bool
24 }
25
26 func (t *tribool_t) Set(s string) error {
27 x := strings.ToLower(s)
28 if x == "true" || x == "on" {
29 t.value = true
30 } else if x == "false" || x == "off" {
31 t.value = false
32 } else {
33 return fmt.Errorf("value \"%s\" not valid for a boolean value", s)
34 }
35 t.isset = true
36 return nil
37 }
38 func (t *tribool_t) String() string {
39 if t == nil {
40 return "tribool description"
41 }
42 if !t.isset {
43 return "undefined"
44 }
45 return fmt.Sprintf("%v", t.value)
46 }
47 func (t *tribool_t) Value() string {
48 return fmt.Sprintf("%v", t.value)
49 }
50 func (t *tribool_t) IsBoolFlag() bool {
51 return true
52 }
53
54 func (t *tribool_t) IsSet() bool {
55 return t.isset
56 }
57 func (t *tribool_t) BoolValue() bool {
58 return t.value
59
60 }
61
View as plain text