From 7afef6be4bfc2e83e69e7d581a89f14b8c824d68 Mon Sep 17 00:00:00 2001 From: Trial97 Date: Fri, 12 Nov 2021 15:42:20 +0200 Subject: [PATCH] Added *join dataconverter --- utils/consts.go | 1 + utils/dataconverter.go | 15 +++++++++++++++ utils/dataconverter_test.go | 24 ++++++++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/utils/consts.go b/utils/consts.go index 311494086..59af07ad7 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -638,6 +638,7 @@ const ( MetaSIPURIUser = "*sipuri_user" E164DomainConverter = "*e164Domain" E164Converter = "*e164" + MetaJoin = "*join" MetaReload = "*reload" MetaLoad = "*load" MetaFloat64 = "*float64" diff --git a/utils/dataconverter.go b/utils/dataconverter.go index a954c9809..a8c050f28 100644 --- a/utils/dataconverter.go +++ b/utils/dataconverter.go @@ -115,6 +115,11 @@ func NewDataConverter(params string) (conv DataConverter, err error) { return NewRandomConverter(EmptyString) } return NewRandomConverter(params[len(MetaRandom)+1:]) + case strings.HasPrefix(params, MetaJoin): + if len(params) == len(MetaJoin) { // no extra params, defaults implied + return joinConverter(FieldsSep), nil + } + return joinConverter(params[len(MetaJoin)+1:]), nil default: return nil, fmt.Errorf("unsupported converter definition: <%s>", params) } @@ -573,3 +578,13 @@ func (e164Converter) Convert(in interface{}) (interface{}, error) { return ReverseString( strings.Replace(name[:i], ".", "", -1)), nil } + +type joinConverter string + +func (j joinConverter) Convert(in interface{}) (interface{}, error) { + slice, err := IfaceAsStringSlice(in) + if err != nil { + return nil, err + } + return strings.Join(slice, string(j)), nil +} diff --git a/utils/dataconverter_test.go b/utils/dataconverter_test.go index ef25e7041..bcabe5f16 100644 --- a/utils/dataconverter_test.go +++ b/utils/dataconverter_test.go @@ -1251,3 +1251,27 @@ func TestDataConverterE164Convert(t *testing.T) { t.Errorf("Expected 'unknown format' error") } } + +func TestJoinConverter(t *testing.T) { + d, err := NewDataConverter(MetaJoin) + if err != nil { + t.Fatal(err) + } + expVal := "1,2,3,5" + if i, err := d.Convert("1;2;3;5"); err != nil { + t.Error(err.Error()) + } else if expVal != i { + t.Errorf("expecting: %q, received: %q", expVal, i) + } + + d, err = NewDataConverter(MetaJoin + ":|") + if err != nil { + t.Fatal(err) + } + expVal = "1|2|3|5" + if i, err := d.Convert("1;2;3;5"); err != nil { + t.Error(err.Error()) + } else if expVal != i { + t.Errorf("expecting: %q, received: %q", expVal, i) + } +}