[#493] cmd/node: Support duration type casting in config

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
Alex Vanin 2021-06-01 14:04:00 +03:00 committed by Alex Vanin
parent 25a13d3611
commit 922d29ff88
4 changed files with 46 additions and 0 deletions

View file

@ -1,6 +1,8 @@
package config
import (
"time"
"github.com/spf13/cast"
)
@ -47,3 +49,22 @@ func String(c *Config, name string) string {
func StringSafe(c *Config, name string) string {
return cast.ToString(c.Value(name))
}
// Duration reads configuration value
// from c by name and casts it to time.Duration.
//
// Panics if value can not be casted.
func Duration(c *Config, name string) time.Duration {
x, err := cast.ToDurationE(c.Value(name))
panicOnErr(err)
return x
}
// DurationSafe reads configuration value
// from c by name and casts it to time.Duration.
//
// Returns 0 if value can not be casted.
func DurationSafe(c *Config, name string) time.Duration {
return cast.ToDuration(c.Value(name))
}

View file

@ -2,6 +2,7 @@ package config_test
import (
"testing"
"time"
"github.com/nspcc-dev/neofs-node/cmd/neofs-node/config"
configtest "github.com/nspcc-dev/neofs-node/cmd/neofs-node/config/test"
@ -45,3 +46,19 @@ func TestString(t *testing.T) {
require.Empty(t, val)
})
}
func TestDuration(t *testing.T) {
configtest.ForEachFileType("test/config", func(c *config.Config) {
c = c.Sub("duration")
val := config.Duration(c, "correct")
require.Equal(t, 15*time.Minute, val)
require.Panics(t, func() {
config.Duration(c, "incorrect")
})
val = config.DurationSafe(c, "incorrect")
require.Equal(t, time.Duration(0), val)
})
}

View file

@ -14,5 +14,9 @@
"string": {
"correct": "some string",
"incorrect": []
},
"duration": {
"correct": "15m",
"incorrect": "some string"
}
}

View file

@ -16,3 +16,7 @@ string:
correct: some string
incorrect: []
duration:
correct: 15m
incorrect: some string