forked from TrueCloudLab/frostfs-node
[#493] node/config: Implement integer casters
Implement `Int` / `Uint` functions which casts value to `int64` / `uint64`. Implement safe functions `IntSafe` / `UintSafe`. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
efcd12c71e
commit
2bbd4d0ee3
4 changed files with 107 additions and 1 deletions
|
@ -68,3 +68,60 @@ func Duration(c *Config, name string) time.Duration {
|
|||
func DurationSafe(c *Config, name string) time.Duration {
|
||||
return cast.ToDuration(c.Value(name))
|
||||
}
|
||||
|
||||
// Bool reads configuration value
|
||||
// from c by name and casts it to bool.
|
||||
//
|
||||
// Panics if value can not be casted.
|
||||
func Bool(c *Config, name string) bool {
|
||||
x, err := cast.ToBoolE(c.Value(name))
|
||||
panicOnErr(err)
|
||||
|
||||
return x
|
||||
}
|
||||
|
||||
// BoolSafe reads configuration value
|
||||
// from c by name and casts it to bool.
|
||||
//
|
||||
// Returns false if value can not be casted.
|
||||
func BoolSafe(c *Config, name string) bool {
|
||||
return cast.ToBool(c.Value(name))
|
||||
}
|
||||
|
||||
// Uint reads configuration value
|
||||
// from c by name and casts it to uint64.
|
||||
//
|
||||
// Panics if value can not be casted.
|
||||
func Uint(c *Config, name string) uint64 {
|
||||
x, err := cast.ToUint64E(c.Value(name))
|
||||
panicOnErr(err)
|
||||
|
||||
return x
|
||||
}
|
||||
|
||||
// UintSafe reads configuration value
|
||||
// from c by name and casts it to uint64.
|
||||
//
|
||||
// Returns 0 if value can not be casted.
|
||||
func UintSafe(c *Config, name string) uint64 {
|
||||
return cast.ToUint64(c.Value(name))
|
||||
}
|
||||
|
||||
// Int reads configuration value
|
||||
// from c by name and casts it to int64.
|
||||
//
|
||||
// Panics if value can not be casted.
|
||||
func Int(c *Config, name string) int64 {
|
||||
x, err := cast.ToInt64E(c.Value(name))
|
||||
panicOnErr(err)
|
||||
|
||||
return x
|
||||
}
|
||||
|
||||
// IntSafe reads configuration value
|
||||
// from c by name and casts it to int64.
|
||||
//
|
||||
// Returns 0 if value can not be casted.
|
||||
func IntSafe(c *Config, name string) int64 {
|
||||
return cast.ToInt64(c.Value(name))
|
||||
}
|
||||
|
|
|
@ -62,3 +62,37 @@ func TestDuration(t *testing.T) {
|
|||
require.Equal(t, time.Duration(0), val)
|
||||
})
|
||||
}
|
||||
|
||||
func TestNumbers(t *testing.T) {
|
||||
configtest.ForEachFileType("test/config", func(c *config.Config) {
|
||||
c = c.Sub("number")
|
||||
|
||||
const (
|
||||
intPos = "int_pos"
|
||||
intNeg = "int_neg"
|
||||
|
||||
fractPos = "fract_pos"
|
||||
fractNeg = "fract_neg"
|
||||
|
||||
incorrect = "incorrect"
|
||||
)
|
||||
|
||||
require.EqualValues(t, 1, config.Int(c, intPos))
|
||||
require.EqualValues(t, 1, config.Uint(c, intPos))
|
||||
|
||||
require.EqualValues(t, -1, config.Int(c, intNeg))
|
||||
require.Panics(t, func() { config.Uint(c, intNeg) })
|
||||
|
||||
require.EqualValues(t, 2, config.Int(c, fractPos))
|
||||
require.EqualValues(t, 2, config.Uint(c, fractPos))
|
||||
|
||||
require.EqualValues(t, -2, config.Int(c, fractNeg))
|
||||
require.Panics(t, func() { config.Uint(c, fractNeg) })
|
||||
|
||||
require.Panics(t, func() { config.Int(c, incorrect) })
|
||||
require.Panics(t, func() { config.Uint(c, incorrect) })
|
||||
|
||||
require.Zero(t, config.IntSafe(c, incorrect))
|
||||
require.Zero(t, config.UintSafe(c, incorrect))
|
||||
})
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
"section": {
|
||||
"any": "thing"
|
||||
},
|
||||
|
||||
"string_slice": {
|
||||
"empty": [],
|
||||
"filled": [
|
||||
|
@ -18,5 +19,12 @@
|
|||
"duration": {
|
||||
"correct": "15m",
|
||||
"incorrect": "some string"
|
||||
},
|
||||
"number": {
|
||||
"int_pos": 1,
|
||||
"int_neg": -1,
|
||||
"fract_pos": 2.5,
|
||||
"fract_neg": -2.5,
|
||||
"incorrect": "some string"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,4 +19,11 @@ string:
|
|||
|
||||
duration:
|
||||
correct: 15m
|
||||
incorrect: some string
|
||||
incorrect: some string
|
||||
|
||||
number:
|
||||
int_pos: 1
|
||||
int_neg: -1
|
||||
fract_pos: 2.5
|
||||
fract_neg: -2.5
|
||||
incorrect: some string
|
||||
|
|
Loading…
Reference in a new issue