From 285dc2a4ea56be4bc7bd66ce25ae384e36177fa6 Mon Sep 17 00:00:00 2001 From: nickolasdaniel Date: Fri, 9 Jul 2021 14:09:51 +0300 Subject: [PATCH] Added float64 converter in dataconverter.go --- utils/consts.go | 1 + utils/dataconverter.go | 9 +++++++++ utils/dataconverter_test.go | 25 +++++++++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/utils/consts.go b/utils/consts.go index 634a1bbeb..02d106470 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -780,6 +780,7 @@ const ( MetaSIPURIUser = "*sipuri_user" MetaReload = "*reload" MetaLoad = "*load" + MetaFloat64 = "*float64" MetaRemove = "*remove" MetaRemoveAll = "*removeall" MetaStore = "*store" diff --git a/utils/dataconverter.go b/utils/dataconverter.go index 2139a3bda..2475c072a 100644 --- a/utils/dataconverter.go +++ b/utils/dataconverter.go @@ -90,6 +90,8 @@ func NewDataConverter(params string) (conv DataConverter, err error) { return new(UnixTimeConverter), nil case params == MetaLen: return new(LengthConverter), nil + case params == MetaFloat64: + return new(Float64Converter), nil case strings.HasPrefix(params, MetaLibPhoneNumber): if len(params) == len(MetaLibPhoneNumber) { return NewPhoneNumberConverter(EmptyString) @@ -465,3 +467,10 @@ func (LengthConverter) Convert(in interface{}) (out interface{}, err error) { } return len(src), nil } + +type Float64Converter struct{} + +// Convert implements DataConverter interface +func (Float64Converter) Convert(in interface{}) (interface{}, error) { + return IfaceAsFloat64(in) +} diff --git a/utils/dataconverter_test.go b/utils/dataconverter_test.go index e8ccebb38..bea5b71a5 100644 --- a/utils/dataconverter_test.go +++ b/utils/dataconverter_test.go @@ -1037,3 +1037,28 @@ func TestLenTimeConverter3(t *testing.T) { t.Errorf("Expecting: %+v, received: %+v", expected, rcv) } } + +func TestFloat64Converter(t *testing.T) { + exp := new(Float64Converter) + cnv, err := NewDataConverter(MetaFloat64) + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(exp, cnv) { + t.Errorf("Expecting: %+v, received: %+v", exp, cnv) + } + + expected := 21.7 + if rcv, err := cnv.Convert("21.7"); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expected, rcv) { + t.Errorf("Expecting: %+v, received: %+v", expected, rcv) + } + + expected2 := "strconv.ParseFloat: parsing \"invalid_input\": invalid syntax" + if _, err := cnv.Convert("invalid_input"); err == nil { + t.Error("Expected error") + } else if !reflect.DeepEqual(expected2, err.Error()) { + t.Errorf("Expecting: %+v, received: %+v", expected2, err.Error()) + } +}