diff --git a/VERSION b/VERSION index 9eb2e1ff..3bd6c568 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.99.0 +1.99.1 diff --git a/examples/service/go.mod b/examples/service/go.mod index 624c729f..3c41d29b 100644 --- a/examples/service/go.mod +++ b/examples/service/go.mod @@ -7,7 +7,7 @@ toolchain go1.22.5 replace github.com/Vonage/gosrvlib => ../.. require ( - github.com/Vonage/gosrvlib v1.99.0 + github.com/Vonage/gosrvlib v1.99.1 github.com/golang/mock v1.6.0 github.com/jstemmer/go-junit-report/v2 v2.1.0 github.com/prometheus/client_golang v1.19.1 diff --git a/pkg/countryphone/countryphone.go b/pkg/countryphone/countryphone.go index 7c78f56c..30544c2e 100644 --- a/pkg/countryphone/countryphone.go +++ b/pkg/countryphone/countryphone.go @@ -189,13 +189,9 @@ func (d *Data) insertPrefix(prefix string, info *NumInfo) { d.trie.Add(prefix, info) } -func (d *Data) insertGroups(a2, cc string, data []InPrefixGroup) { - if len(data) == 0 { - return - } - - for _, g := range data { - info := &NumInfo{ +func (d *Data) insertGroups(a2 string, cdata *InCountryData) { + for _, g := range cdata.Groups { + groupInfo := &NumInfo{ Type: g.PrefixType, Geo: []*GeoInfo{ { @@ -207,12 +203,12 @@ func (d *Data) insertGroups(a2, cc string, data []InPrefixGroup) { } if len(g.Prefixes) == 0 { - d.insertPrefix(cc, info) + d.insertPrefix(cdata.CC, groupInfo) continue } for _, p := range g.Prefixes { - d.insertPrefix(p, info) + d.insertPrefix(p, groupInfo) } } } @@ -221,19 +217,27 @@ func (d *Data) insertGroups(a2, cc string, data []InPrefixGroup) { func (d *Data) loadData(data InData) { d.trie = numtrie.New[NumInfo]() - for k, v := range data { - info := &NumInfo{ - Type: 0, - Geo: []*GeoInfo{ - { - Alpha2: k, - Area: "", - Type: 0, + doneRootCC := make(map[string]bool, (26*26)+1) // all possible CCs + 1 for non-geographic + + for a2, cdata := range data { + if _, ok := doneRootCC[a2]; !ok { + // insert the root node for the country code only once + d.insertPrefix(cdata.CC, &NumInfo{ + Type: 0, + Geo: []*GeoInfo{ + { + Alpha2: a2, + Area: "", + Type: 0, + }, }, - }, + }) + + doneRootCC[a2] = true } - d.insertPrefix(v.CC, info) - d.insertGroups(k, v.CC, v.Groups) + if len(cdata.Groups) > 0 { + d.insertGroups(a2, cdata) + } } } diff --git a/pkg/countryphone/countryphone_test.go b/pkg/countryphone/countryphone_test.go index 1637ff65..cdf4ff0c 100644 --- a/pkg/countryphone/countryphone_test.go +++ b/pkg/countryphone/countryphone_test.go @@ -133,7 +133,8 @@ func TestData_NumberInfo(t *testing.T) { } require.NoError(t, err) - require.EqualExportedValues(t, tt.want, got) + require.Equal(t, tt.want.Type, got.Type) + require.ElementsMatch(t, tt.want.Geo, got.Geo) }) } } @@ -330,7 +331,8 @@ func TestData_NumberInfo_custom(t *testing.T) { } require.NoError(t, err) - require.EqualExportedValues(t, tt.want, got) + require.Equal(t, tt.want.Type, got.Type) + require.ElementsMatch(t, tt.want.Geo, got.Geo) }) } }