mcfg: implement ParamDefaultOrRequired
This commit is contained in:
parent
481b3668c3
commit
4791c02122
@ -47,3 +47,23 @@ func TestPopulate(t *T) {
|
|||||||
assert.Equal(t, 3, *c)
|
assert.Equal(t, 3, *c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestParamDefaultOrRequired(t *T) {
|
||||||
|
{
|
||||||
|
cmp := new(mcmp.Component)
|
||||||
|
Int(cmp, "a", ParamDefaultOrRequired(0))
|
||||||
|
params := CollectParams(cmp)
|
||||||
|
assert.Equal(t, "a", params[0].Name)
|
||||||
|
assert.Equal(t, true, params[0].Required)
|
||||||
|
assert.Equal(t, new(int), params[0].Into)
|
||||||
|
}
|
||||||
|
{
|
||||||
|
cmp := new(mcmp.Component)
|
||||||
|
Int(cmp, "a", ParamDefaultOrRequired(1))
|
||||||
|
i := 1
|
||||||
|
params := CollectParams(cmp)
|
||||||
|
assert.Equal(t, "a", params[0].Name)
|
||||||
|
assert.Equal(t, false, params[0].Required)
|
||||||
|
assert.Equal(t, &i, params[0].Into)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -83,6 +83,18 @@ func ParamDefault(value interface{}) ParamOption {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ParamDefaultOrRequired returns a ParamOption whose behavior depends on the
|
||||||
|
// given value. If the given value is the zero value for its type, then this returns
|
||||||
|
// ParamRequired(), otherwise this returns ParamDefault(value).
|
||||||
|
func ParamDefaultOrRequired(value interface{}) ParamOption {
|
||||||
|
v := reflect.ValueOf(value)
|
||||||
|
zero := reflect.Zero(v.Type())
|
||||||
|
if v.Interface() == zero.Interface() {
|
||||||
|
return ParamRequired()
|
||||||
|
}
|
||||||
|
return ParamDefault(value)
|
||||||
|
}
|
||||||
|
|
||||||
// ParamUsage returns a ParamOption which sets the usage string on the Param.
|
// ParamUsage returns a ParamOption which sets the usage string on the Param.
|
||||||
// This is used in some Sources, like SourceCLI, when displaying information
|
// This is used in some Sources, like SourceCLI, when displaying information
|
||||||
// about available parameters.
|
// about available parameters.
|
||||||
|
Loading…
Reference in New Issue
Block a user