From 001950a3e0783e46ca963267f7560e0e82dac796 Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Sat, 29 Aug 2020 16:47:29 +0200 Subject: [PATCH] More robust settings value conversion Fixes #16 --- system/types/kv_decoder.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/system/types/kv_decoder.go b/system/types/kv_decoder.go index 52d393bc0..307091a20 100644 --- a/system/types/kv_decoder.go +++ b/system/types/kv_decoder.go @@ -3,6 +3,7 @@ package types import ( "github.com/pkg/errors" "reflect" + "strconv" "strings" ) @@ -143,8 +144,18 @@ func DecodeKV(kv SettingsKV, dst interface{}, pp ...string) (err error) { // Native type if val, ok := kv[key]; ok { // Always use pointer to value - if err = val.Unmarshal(structField.Addr().Interface()); err != nil { - return errors.Wrapf(err, "cannot decode settings for %q", key) + if val.Unmarshal(structField.Addr().Interface()) != nil { + // Try to get numbers encoded as strings... + var tmp interface{} + if val.Unmarshal(&tmp) != nil { + return err + } + + switch cnv := tmp.(type) { + case string: + num, _ := strconv.ParseUint(cnv, 10, 64) + structField.SetUint(num) + } } } }