@@ -32,11 +32,11 @@ func (thisRef *Command) flagNeededCommandsForExecuteAndPopulateTheirFlags(args [
3232 }
3333 }
3434
35- requriedFlags := thisRef .getRequriedFlags ()
36- setRequriedFlagAsSet := func (flagName string ) {
37- for i := 0 ; i < len (requriedFlags ); i ++ {
38- if requriedFlags [i ].name == flagName {
39- requriedFlags [i ].wasSet = true
35+ requiredFlags := thisRef .getRequiredFlags ()
36+ setRequiredFlagAsSet := func (flagName string ) {
37+ for i := 0 ; i < len (requiredFlags ); i ++ {
38+ if requiredFlags [i ].name == flagName {
39+ requiredFlags [i ].wasSet = true
4040 break
4141 }
4242 }
@@ -58,7 +58,7 @@ func (thisRef *Command) flagNeededCommandsForExecuteAndPopulateTheirFlags(args [
5858 setFlagWithDefaultValue (flagName )
5959 if thisRef .getFlag (flagName ).Kind () == reflect .Bool {
6060 thisRef .setFlagValue (flagName , "true" )
61- setRequriedFlagAsSet (flagName )
61+ setRequiredFlagAsSet (flagName )
6262 }
6363
6464 continue
@@ -71,7 +71,7 @@ func (thisRef *Command) flagNeededCommandsForExecuteAndPopulateTheirFlags(args [
7171 setFlagWithDefaultValue (flagName )
7272 if thisRef .getFlag (flagName ).Kind () == reflect .Bool {
7373 thisRef .setFlagValue (flagName , "true" )
74- setRequriedFlagAsSet (flagName )
74+ setRequiredFlagAsSet (flagName )
7575 }
7676
7777 continue
@@ -80,7 +80,7 @@ func (thisRef *Command) flagNeededCommandsForExecuteAndPopulateTheirFlags(args [
8080 // case 3 - this is a flag value, then set the value to the current `Flags` struct
8181 flagValue := args [nextIndex ]
8282 thisRef .setFlagValue (flagName , flagValue )
83- setRequriedFlagAsSet (flagName )
83+ setRequiredFlagAsSet (flagName )
8484 index = nextIndex
8585 continue
8686 }
@@ -90,7 +90,7 @@ func (thisRef *Command) flagNeededCommandsForExecuteAndPopulateTheirFlags(args [
9090 setFlagWithDefaultValue (flagName )
9191 if thisRef .getFlag (flagName ).Kind () == reflect .Bool {
9292 thisRef .setFlagValue (flagName , "true" )
93- setRequriedFlagAsSet (flagName )
93+ setRequiredFlagAsSet (flagName )
9494 }
9595
9696 continue
@@ -115,12 +115,12 @@ func (thisRef *Command) flagNeededCommandsForExecuteAndPopulateTheirFlags(args [
115115 continue
116116 }
117117
118- // case 3 - uknown COMMAND or FLAG
118+ // case 3 - unknown COMMAND or FLAG
119119 // ignore
120120 }
121121
122122 // check that all required flags are set
123- for _ , rf := range requriedFlags {
123+ for _ , rf := range requiredFlags {
124124 if ! rf .wasSet {
125125 updateErrorToReturn (fmt .Errorf ("Missing required flag [%s]" , rf .name ))
126126 break
@@ -198,7 +198,7 @@ func (thisRef *Command) setFlagValue(flagName string, flagValue string) {
198198 // update the struct field value
199199 updateHappened := false
200200 for i := 0 ; i < runtimeStructRef .NumField (); i ++ {
201- attrFlagName := runtimeStructRef .Type ().Field (i ).Tag .Get ("flagName" )
201+ attrFlagName := runtimeStructRef .Type ().Field (i ).Tag .Get (flagNameTag )
202202 if attrFlagName == flagName {
203203 field := runtimeStructRef .Field (i )
204204 setFieldValue (field , flagValue )
@@ -222,7 +222,7 @@ func (thisRef *Command) getFlag(flagName string) reflect.Value {
222222 }
223223
224224 for i := 0 ; i < runtimeStructRef .NumField (); i ++ {
225- attrFlagName := runtimeStructRef .Type ().Field (i ).Tag .Get ("flagName" )
225+ attrFlagName := runtimeStructRef .Type ().Field (i ).Tag .Get (flagNameTag )
226226 if attrFlagName == flagName {
227227 result = runtimeStructRef .Field (i )
228228 break
@@ -248,22 +248,34 @@ func setFieldValue(field reflect.Value, valueAsString string) {
248248 fallthrough
249249 case reflect .Func :
250250 fallthrough
251- case reflect .Interface :
252- fallthrough
253251 case reflect .Map :
254252 fallthrough
255- case reflect .Ptr :
256- fallthrough
257253 case reflect .Slice :
258254 fallthrough
259255 case reflect .Struct :
260256 fallthrough
261257 case reflect .UnsafePointer :
258+ fallthrough
259+ case reflect .Interface :
262260 // INFO: ignore
263261
262+ case reflect .Ptr :
263+ setBasicTypeValue (& field , field .Type ().Elem ().Kind (), valueAsString )
264+
265+ default :
266+ setBasicTypeValue (& field , field .Kind (), valueAsString )
267+ }
268+ }
269+
270+ func setBasicTypeValue (field * reflect.Value , kind reflect.Kind , valueAsString string ) {
271+ switch kind {
264272 case reflect .Bool :
265273 value , _ := strconv .ParseBool (valueAsString )
266- field .SetBool (value )
274+ if field .Kind () == reflect .Ptr {
275+ field .Set (reflect .ValueOf (& value ))
276+ } else {
277+ field .SetBool (value )
278+ }
267279
268280 case reflect .Int :
269281 fallthrough
@@ -275,7 +287,12 @@ func setFieldValue(field reflect.Value, valueAsString string) {
275287 fallthrough
276288 case reflect .Int64 :
277289 value , _ := strconv .ParseInt (valueAsString , 10 , 64 )
278- field .SetInt (value )
290+ if field .Kind () == reflect .Ptr {
291+ valueAsInt32 := int (value ) // FIXME: for some reason next line fails to work with int64
292+ field .Set (reflect .ValueOf (& valueAsInt32 ))
293+ } else {
294+ field .SetInt (value )
295+ }
279296
280297 case reflect .Uint :
281298 fallthrough
@@ -287,16 +304,31 @@ func setFieldValue(field reflect.Value, valueAsString string) {
287304 fallthrough
288305 case reflect .Uint64 :
289306 value , _ := strconv .ParseUint (valueAsString , 10 , 64 )
290- field .SetUint (value )
307+ if field .Kind () == reflect .Ptr {
308+ valueAsUint32 := uint (value ) // FIXME: for some reason next line fails to work with Uint64
309+ field .Set (reflect .ValueOf (& valueAsUint32 ))
310+ } else {
311+ field .SetUint (value )
312+ }
291313
292314 case reflect .Float32 :
293315 fallthrough
294316 case reflect .Float64 :
295317 value , _ := strconv .ParseFloat (valueAsString , 64 )
296- field .SetFloat (value )
318+ if field .Kind () == reflect .Ptr {
319+ valueAsFloat32 := float32 (value ) // FIXME: for some reason next line fails to work with float64
320+ field .Set (reflect .ValueOf (& valueAsFloat32 ))
321+ } else {
322+ field .SetFloat (value )
323+ }
297324
298325 case reflect .String :
299- field .SetString (valueAsString )
326+ if field .Kind () == reflect .Ptr {
327+ field .Set (reflect .ValueOf (& valueAsString ))
328+ } else {
329+ field .SetString (valueAsString )
330+ }
331+
300332 }
301333}
302334
0 commit comments