@@ -6,10 +6,20 @@ import (
66 "strconv"
77)
88
9+ func truthiness (s string ) bool {
10+ thruthy := map [string ]bool {
11+ "y" : true ,
12+ "true" : true ,
13+ "yes" : true ,
14+ }
15+ return thruthy [s ]
16+ }
17+
918type Settings struct {
1019 msg map [string ]string
1120 VarString map [string ]string
1221 VarInt map [string ]int
22+ VarBool map [string ]bool
1323 Parsers map [string ]func (string ) string
1424 ParsersInt map [string ]func (int ) int
1525}
@@ -28,6 +38,11 @@ func (s *Settings) SetInt(flagName string, defaultVar int, message string) {
2838 s .VarInt [flagName ] = defaultVar
2939}
3040
41+ func (s * Settings ) SetBool (flagName string , defaultVar bool , message string ) {
42+ s .msg [flagName ] = message
43+ s .VarBool [flagName ] = defaultVar
44+ }
45+
3146func (s * Settings ) SetParsed (flagName , defaultVar , message string , parserFunc func (string ) string ) {
3247 s .msg [flagName ] = message
3348 s .VarString [flagName ] = defaultVar
@@ -48,6 +63,10 @@ func (s Settings) GetInt(flagName string) int {
4863 return s .VarInt [flagName ]
4964}
5065
66+ func (s Settings ) GetBool (flagName string ) bool {
67+ return s .VarBool [flagName ]
68+ }
69+
5170func (s * Settings ) HandleCMDLineInput () {
5271 parsedString := make (map [string ]* string )
5372 for key , val := range s .VarString {
@@ -59,6 +78,11 @@ func (s *Settings) HandleCMDLineInput() {
5978 var newV = flag .Int (key , val , s .msg [key ])
6079 parsedInt [key ] = newV
6180 }
81+ parsedBool := make (map [string ]* string )
82+ for key , val := range s .VarBool {
83+ var newV = flag .String (key , strconv .FormatBool (val ), s .msg [key ])
84+ parsedBool [key ] = newV
85+ }
6286 flag .Parse ()
6387
6488 for key , val := range parsedString {
@@ -75,6 +99,9 @@ func (s *Settings) HandleCMDLineInput() {
7599 s .VarInt [key ] = * val
76100 }
77101 }
102+ for key , val := range parsedBool {
103+ s .VarBool [key ] = truthiness (* val )
104+ }
78105}
79106
80107func (s * Settings ) HandleOSInput () {
@@ -92,6 +119,12 @@ func (s *Settings) HandleOSInput() {
92119 }
93120 }
94121 }
122+ for key , _ := range s .VarBool {
123+ varEnv , found := os .LookupEnv (key )
124+ if found {
125+ s .VarBool [key ] = truthiness (varEnv )
126+ }
127+ }
95128}
96129
97130func (s * Settings ) Parse () {
@@ -105,4 +138,5 @@ var SETTINGS = Settings{
105138 VarInt : make (map [string ]int ),
106139 Parsers : make (map [string ]func (string ) string ),
107140 ParsersInt : make (map [string ]func (int ) int ),
141+ VarBool : make (map [string ]bool ),
108142}
0 commit comments