diff --git a/accounts/libaccounts.go b/accounts/libaccounts.go index 282325baa..ec9303a2f 100644 --- a/accounts/libaccounts.go +++ b/accounts/libaccounts.go @@ -21,6 +21,7 @@ package accounts import ( "errors" "fmt" + "slices" "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" @@ -115,7 +116,7 @@ func rateSCostForEvent(ctx *context.Context, connMgr *engine.ConnManager, cgrEv return nil, utils.NewErrNotConnected(utils.RateS) } tmp := cgrEv.APIOpts[utils.OptsRatesProfileIDs] - cgrEv.APIOpts[utils.OptsRatesProfileIDs] = utils.CloneStringSlice(rpIDs) + cgrEv.APIOpts[utils.OptsRatesProfileIDs] = slices.Clone(rpIDs) var tmpReply utils.RateProfileCost err = connMgr.Call(ctx, rateSConns, utils.RateSv1CostForEvent, cgrEv, &tmpReply) diff --git a/agents/agentreq.go b/agents/agentreq.go index b2745264f..25d1f1007 100644 --- a/agents/agentreq.go +++ b/agents/agentreq.go @@ -20,6 +20,7 @@ package agents import ( "fmt" + "slices" "strings" "github.com/cgrates/birpc/context" @@ -230,7 +231,7 @@ func (ar *AgentRequest) SetFields(tplFlds []*config.FCTemplate) (err error) { return } else if fullPath == nil { // no dynamic path fullPath = &utils.FullPath{ - PathSlice: utils.CloneStringSlice(tplFld.GetPathSlice()), // need to clone so me do not modify the template + PathSlice: slices.Clone(tplFld.GetPathSlice()), // need to clone so me do not modify the template Path: tplFld.Path, } } @@ -321,14 +322,14 @@ func (ar *AgentRequest) Remove(fullPath *utils.FullPath) error { default: return fmt.Errorf("unsupported field prefix: <%s> when set fields", fullPath.PathSlice[0]) case utils.MetaVars: - return ar.Vars.Remove(utils.CloneStringSlice(fullPath.PathSlice[1:])) + return ar.Vars.Remove(slices.Clone(fullPath.PathSlice[1:])) case utils.MetaCgreq: return ar.CGRRequest.Remove(&utils.FullPath{ PathSlice: fullPath.PathSlice[1:], Path: fullPath.Path[7:], }) case utils.MetaCgrep: - return ar.CGRReply.Remove(utils.CloneStringSlice(fullPath.PathSlice[1:])) + return ar.CGRReply.Remove(slices.Clone(fullPath.PathSlice[1:])) case utils.MetaRep: return ar.Reply.Remove(&utils.FullPath{ PathSlice: fullPath.PathSlice[1:], @@ -340,7 +341,7 @@ func (ar *AgentRequest) Remove(fullPath *utils.FullPath) error { Path: fullPath.Path[9:], }) case utils.MetaTmp: - return ar.tmp.Remove(utils.CloneStringSlice(fullPath.PathSlice[1:])) + return ar.tmp.Remove(slices.Clone(fullPath.PathSlice[1:])) case utils.MetaOpts: return ar.Opts.Remove(fullPath.PathSlice[1:]) case utils.MetaUCH: diff --git a/agents/fsevent.go b/agents/fsevent.go index c34b2d3e6..536d8be21 100644 --- a/agents/fsevent.go +++ b/agents/fsevent.go @@ -20,6 +20,7 @@ package agents import ( "fmt" + "slices" "strconv" "strings" "time" @@ -230,7 +231,7 @@ func (fsev FSEvent) GetDuration(fieldName string) (time.Duration, error) { func (fsev FSEvent) GetPdd(fieldName string) (time.Duration, error) { var PDDStr string - if utils.SliceHasMember([]string{utils.MetaDefault, utils.PDD}, fieldName) { + if slices.Contains([]string{utils.MetaDefault, utils.PDD}, fieldName) { PDDStr = utils.FirstNonEmpty(fsev[PDD_MEDIA_MS], fsev[PDD_NOMEDIA_MS]) if len(PDDStr) != 0 { PDDStr = PDDStr + "ms" // PDD is in milliseconds and CGR expects it in seconds @@ -245,7 +246,7 @@ func (fsev FSEvent) GetPdd(fieldName string) (time.Duration, error) { func (fsev FSEvent) GetADC(fieldName string) (time.Duration, error) { var ACDStr string - if utils.SliceHasMember([]string{utils.MetaDefault, utils.ACD}, fieldName) { + if slices.Contains([]string{utils.MetaDefault, utils.ACD}, fieldName) { ACDStr = utils.FirstNonEmpty(fsev[VarCGRACD]) if len(ACDStr) != 0 { ACDStr = ACDStr + "s" // ACD is in seconds and CGR expects it in seconds diff --git a/agents/kamevent.go b/agents/kamevent.go index 0321e0d5d..e5173e7ed 100644 --- a/agents/kamevent.go +++ b/agents/kamevent.go @@ -20,6 +20,7 @@ package agents import ( "encoding/json" + "slices" "strings" "github.com/cgrates/cgrates/config" @@ -85,12 +86,12 @@ type KamEvent map[string]string func (kev KamEvent) MissingParameter() bool { switch kev[EVENT] { case CGR_AUTH_REQUEST: - return utils.IsSliceMember([]string{ + return slices.Contains([]string{ kev[KamTRIndex], kev[KamTRLabel], }, "") case CGR_CALL_START: - return utils.IsSliceMember([]string{ + return slices.Contains([]string{ kev[KamHashEntry], kev[KamHashID], kev[utils.OriginID], @@ -99,7 +100,7 @@ func (kev KamEvent) MissingParameter() bool { kev[utils.Destination], }, "") case CGR_CALL_END: - return utils.IsSliceMember([]string{ + return slices.Contains([]string{ kev[utils.OriginID], kev[utils.AnswerTime], kev[utils.AccountField], @@ -117,10 +118,10 @@ func (kev KamEvent) MissingParameter() bool { kev[utils.AccountField], kev[utils.Destination]) } - return utils.IsSliceMember(mndPrm, "") + return slices.Contains(mndPrm, "") case CGR_PROCESS_CDR: // TRIndex and TRLabel must exist in order to know where to send back the response - return utils.IsSliceMember([]string{ + return slices.Contains([]string{ kev[KamTRIndex], kev[KamTRLabel], kev[utils.OriginID], diff --git a/apis/actions_it_test.go b/apis/actions_it_test.go index c061d9582..529089386 100644 --- a/apis/actions_it_test.go +++ b/apis/actions_it_test.go @@ -27,6 +27,7 @@ import ( "net/http/httptest" "path" "reflect" + "slices" "sort" "testing" "time" @@ -678,7 +679,7 @@ func testActionsRemoveActionProfiles(t *testing.T) { t.Fatal(err) } else { sort.Strings(actionProfileIDs) - if !utils.SliceStringEqual(actionProfileIDs, expected) { + if !slices.Equal(actionProfileIDs, expected) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expected, actionProfileIDs) } } diff --git a/apis/attributes_it_test.go b/apis/attributes_it_test.go index f12b546d7..0b1bc3efa 100644 --- a/apis/attributes_it_test.go +++ b/apis/attributes_it_test.go @@ -24,6 +24,7 @@ package apis import ( "path" "reflect" + "slices" "sort" "testing" "time" @@ -373,7 +374,7 @@ func testAttributesGetAttributeProfileIDsAfterSet(t *testing.T) { t.Error(err) } else { sort.Strings(replyAttributeProfileIDs) - if !utils.SliceStringEqual(replyAttributeProfileIDs, expectedIDs) { + if !slices.Equal(replyAttributeProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyAttributeProfileIDs) } } @@ -387,7 +388,7 @@ func testAttributesGetAttributeProfileIDsAfterSet(t *testing.T) { t.Error(err) } else { sort.Strings(replyAttributeProfileIDs) - if !utils.SliceStringEqual(replyAttributeProfileIDs, expectedIDs) { + if !slices.Equal(replyAttributeProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyAttributeProfileIDs) } } @@ -401,7 +402,7 @@ func testAttributesGetAttributeProfileIDsAfterSet(t *testing.T) { t.Error(err) } else { sort.Strings(replyAttributeProfileIDs) - if !utils.SliceStringEqual(replyAttributeProfileIDs, expectedIDs) { + if !slices.Equal(replyAttributeProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyAttributeProfileIDs) } } @@ -595,7 +596,7 @@ func testAttributesGetAttributeProfileIDsAfterRemove(t *testing.T) { t.Error(err) } else { sort.Strings(replyAttributeProfileIDs) - if !utils.SliceStringEqual(replyAttributeProfileIDs, expectedIDs) { + if !slices.Equal(replyAttributeProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyAttributeProfileIDs) } } @@ -609,7 +610,7 @@ func testAttributesGetAttributeProfileIDsAfterRemove(t *testing.T) { t.Error(err) } else { sort.Strings(replyAttributeProfileIDs) - if !utils.SliceStringEqual(replyAttributeProfileIDs, expectedIDs) { + if !slices.Equal(replyAttributeProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyAttributeProfileIDs) } } @@ -623,7 +624,7 @@ func testAttributesGetAttributeProfileIDsAfterRemove(t *testing.T) { t.Error(err) } else { sort.Strings(replyAttributeProfileIDs) - if !utils.SliceStringEqual(replyAttributeProfileIDs, expectedIDs) { + if !slices.Equal(replyAttributeProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyAttributeProfileIDs) } } diff --git a/apis/chargers_it_test.go b/apis/chargers_it_test.go index f646acaae..95bd2a886 100644 --- a/apis/chargers_it_test.go +++ b/apis/chargers_it_test.go @@ -24,6 +24,7 @@ package apis import ( "path" "reflect" + "slices" "sort" "testing" @@ -313,7 +314,7 @@ func testChargersGetChargerProfileIDsAfterSet(t *testing.T) { t.Error(err) } else { sort.Strings(replyChargerProfileIDs) - if !utils.SliceStringEqual(replyChargerProfileIDs, expectedIDs) { + if !slices.Equal(replyChargerProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyChargerProfileIDs) } } @@ -327,7 +328,7 @@ func testChargersGetChargerProfileIDsAfterSet(t *testing.T) { t.Error(err) } else { sort.Strings(replyChargerProfileIDs) - if !utils.SliceStringEqual(replyChargerProfileIDs, expectedIDs) { + if !slices.Equal(replyChargerProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyChargerProfileIDs) } } @@ -341,7 +342,7 @@ func testChargersGetChargerProfileIDsAfterSet(t *testing.T) { t.Error(err) } else { sort.Strings(replyChargerProfileIDs) - if !utils.SliceStringEqual(replyChargerProfileIDs, expectedIDs) { + if !slices.Equal(replyChargerProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyChargerProfileIDs) } } @@ -505,7 +506,7 @@ func testChargersGetChargerProfileIDsAfterRemove(t *testing.T) { t.Error(err) } else { sort.Strings(replyChargerProfileIDs) - if !utils.SliceStringEqual(replyChargerProfileIDs, expectedIDs) { + if !slices.Equal(replyChargerProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyChargerProfileIDs) } } @@ -519,7 +520,7 @@ func testChargersGetChargerProfileIDsAfterRemove(t *testing.T) { t.Error(err) } else { sort.Strings(replyChargerProfileIDs) - if !utils.SliceStringEqual(replyChargerProfileIDs, expectedIDs) { + if !slices.Equal(replyChargerProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyChargerProfileIDs) } } @@ -533,7 +534,7 @@ func testChargersGetChargerProfileIDsAfterRemove(t *testing.T) { t.Error(err) } else { sort.Strings(replyChargerProfileIDs) - if !utils.SliceStringEqual(replyChargerProfileIDs, expectedIDs) { + if !slices.Equal(replyChargerProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyChargerProfileIDs) } } @@ -851,7 +852,7 @@ func testChargersBlockerRemoveChargerProfiles(t *testing.T) { t.Fatal(err) } else { sort.Strings(chargerProfileIDs) - if !utils.SliceStringEqual(chargerProfileIDs, expected) { + if !slices.Equal(chargerProfileIDs, expected) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expected, chargerProfileIDs) } } diff --git a/apis/filter_indexes.go b/apis/filter_indexes.go index 7583d5c68..3800c8901 100644 --- a/apis/filter_indexes.go +++ b/apis/filter_indexes.go @@ -19,6 +19,7 @@ along with this program. If not, see package apis import ( + "slices" "strings" "time" @@ -245,7 +246,7 @@ func (adms *AdminSv1) ComputeFilterIndexes(ctx *context.Context, args *utils.Arg if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(th.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(th.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -260,7 +261,7 @@ func (adms *AdminSv1) ComputeFilterIndexes(ctx *context.Context, args *utils.Arg if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(sq.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(sq.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -275,7 +276,7 @@ func (adms *AdminSv1) ComputeFilterIndexes(ctx *context.Context, args *utils.Arg if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(rp.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(rp.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -290,7 +291,7 @@ func (adms *AdminSv1) ComputeFilterIndexes(ctx *context.Context, args *utils.Arg if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(rp.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(rp.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -305,7 +306,7 @@ func (adms *AdminSv1) ComputeFilterIndexes(ctx *context.Context, args *utils.Arg if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(attr.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(attr.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -320,7 +321,7 @@ func (adms *AdminSv1) ComputeFilterIndexes(ctx *context.Context, args *utils.Arg if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(ch.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(ch.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -335,7 +336,7 @@ func (adms *AdminSv1) ComputeFilterIndexes(ctx *context.Context, args *utils.Arg if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(acnts.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(acnts.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -350,7 +351,7 @@ func (adms *AdminSv1) ComputeFilterIndexes(ctx *context.Context, args *utils.Arg if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(act.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(act.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -374,12 +375,12 @@ func (adms *AdminSv1) ComputeFilterIndexes(ctx *context.Context, args *utils.Arg cacheIDs[utils.CacheRateFilterIndexes] = rtIds _, e = engine.ComputeIndexes(ctx, adms.dm, tnt, id, utils.CacheRateFilterIndexes, &rtIds, transactionID, func(_, id, _ string) (*[]string, error) { - return utils.SliceStringPointer(utils.CloneStringSlice(rtPrf.Rates[id].FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(rtPrf.Rates[id].FilterIDs)), nil }, nil) if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(rtPrf.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(rtPrf.FilterIDs)), nil }, nil); err != nil { return utils.APIErrorHandler(err) } @@ -394,7 +395,7 @@ func (adms *AdminSv1) ComputeFilterIndexes(ctx *context.Context, args *utils.Arg if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(dsp.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(dsp.FilterIDs)), nil }, nil); err != nil && err != utils.ErrDSPProfileNotFound { return utils.APIErrorHandler(err) } @@ -502,7 +503,7 @@ func (adms *AdminSv1) ComputeFilterIndexIDs(ctx *context.Context, args *utils.Ar if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(th.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(th.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -517,7 +518,7 @@ func (adms *AdminSv1) ComputeFilterIndexIDs(ctx *context.Context, args *utils.Ar return nil, e } cacheIDs[utils.CacheStatFilterIndexes] = []string{sq.ID} - return utils.SliceStringPointer(utils.CloneStringSlice(sq.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(sq.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -532,7 +533,7 @@ func (adms *AdminSv1) ComputeFilterIndexIDs(ctx *context.Context, args *utils.Ar return nil, e } cacheIDs[utils.CacheResourceFilterIndexes] = []string{rp.ID} - return utils.SliceStringPointer(utils.CloneStringSlice(rp.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(rp.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -547,7 +548,7 @@ func (adms *AdminSv1) ComputeFilterIndexIDs(ctx *context.Context, args *utils.Ar return nil, e } cacheIDs[utils.CacheRouteFilterIndexes] = []string{rp.ID} - return utils.SliceStringPointer(utils.CloneStringSlice(rp.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(rp.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -561,7 +562,7 @@ func (adms *AdminSv1) ComputeFilterIndexIDs(ctx *context.Context, args *utils.Ar if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(attr.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(attr.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -575,7 +576,7 @@ func (adms *AdminSv1) ComputeFilterIndexIDs(ctx *context.Context, args *utils.Ar if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(ch.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(ch.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -589,7 +590,7 @@ func (adms *AdminSv1) ComputeFilterIndexIDs(ctx *context.Context, args *utils.Ar if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(acc.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(acc.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -603,7 +604,7 @@ func (adms *AdminSv1) ComputeFilterIndexIDs(ctx *context.Context, args *utils.Ar if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(act.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(act.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -625,7 +626,7 @@ func (adms *AdminSv1) ComputeFilterIndexIDs(ctx *context.Context, args *utils.Ar } indexesRate, e := engine.ComputeIndexes(ctx, adms.dm, tnt, id, utils.CacheRateFilterIndexes, &rtIds, transactionID, func(_, id, _ string) (*[]string, error) { - return utils.SliceStringPointer(utils.CloneStringSlice(rpr.Rates[id].FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(rpr.Rates[id].FilterIDs)), nil }, nil) if e != nil { return nil, e @@ -633,7 +634,7 @@ func (adms *AdminSv1) ComputeFilterIndexIDs(ctx *context.Context, args *utils.Ar if indexesRate.Size() != 0 { cacheIDs[utils.CacheRateFilterIndexes] = indexesRate.AsSlice() } - return utils.SliceStringPointer(utils.CloneStringSlice(rpr.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(rpr.FilterIDs)), nil }, nil); err != nil && err != utils.ErrNotFound { return utils.APIErrorHandler(err) } @@ -647,7 +648,7 @@ func (adms *AdminSv1) ComputeFilterIndexIDs(ctx *context.Context, args *utils.Ar if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(dsp.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(dsp.FilterIDs)), nil }, nil); err != nil && err != utils.ErrDSPProfileNotFound { return utils.APIErrorHandler(err) } diff --git a/apis/filters_it_test.go b/apis/filters_it_test.go index ddea9cb1f..0336ccbfc 100644 --- a/apis/filters_it_test.go +++ b/apis/filters_it_test.go @@ -24,6 +24,7 @@ package apis import ( "path" "reflect" + "slices" "sort" "testing" @@ -316,7 +317,7 @@ func testFiltersGetFilterIDsAfterSet(t *testing.T) { t.Error(err) } else { sort.Strings(replyFilterIDs) - if !utils.SliceStringEqual(replyFilterIDs, expectedIDs) { + if !slices.Equal(replyFilterIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyFilterIDs) } } @@ -330,7 +331,7 @@ func testFiltersGetFilterIDsAfterSet(t *testing.T) { t.Error(err) } else { sort.Strings(replyFilterIDs) - if !utils.SliceStringEqual(replyFilterIDs, expectedIDs) { + if !slices.Equal(replyFilterIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyFilterIDs) } } @@ -344,7 +345,7 @@ func testFiltersGetFilterIDsAfterSet(t *testing.T) { t.Error(err) } else { sort.Strings(replyFilterIDs) - if !utils.SliceStringEqual(replyFilterIDs, expectedIDs) { + if !slices.Equal(replyFilterIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyFilterIDs) } } @@ -518,7 +519,7 @@ func testFiltersGetFilterIDsAfterRemove(t *testing.T) { t.Error(err) } else { sort.Strings(replyFilterIDs) - if !utils.SliceStringEqual(replyFilterIDs, expectedIDs) { + if !slices.Equal(replyFilterIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyFilterIDs) } } @@ -532,7 +533,7 @@ func testFiltersGetFilterIDsAfterRemove(t *testing.T) { t.Error(err) } else { sort.Strings(replyFilterIDs) - if !utils.SliceStringEqual(replyFilterIDs, expectedIDs) { + if !slices.Equal(replyFilterIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyFilterIDs) } } @@ -546,7 +547,7 @@ func testFiltersGetFilterIDsAfterRemove(t *testing.T) { t.Error(err) } else { sort.Strings(replyFilterIDs) - if !utils.SliceStringEqual(replyFilterIDs, expectedIDs) { + if !slices.Equal(replyFilterIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyFilterIDs) } } diff --git a/apis/routes_it_test.go b/apis/routes_it_test.go index eb048caf6..73da654fb 100644 --- a/apis/routes_it_test.go +++ b/apis/routes_it_test.go @@ -24,6 +24,7 @@ package apis import ( "path" "reflect" + "slices" "sort" "testing" @@ -342,7 +343,7 @@ func testRoutesGetRouteProfileIDsAfterSet(t *testing.T) { t.Error(err) } else { sort.Strings(replyRouteProfileIDs) - if !utils.SliceStringEqual(replyRouteProfileIDs, expectedIDs) { + if !slices.Equal(replyRouteProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyRouteProfileIDs) } } @@ -356,7 +357,7 @@ func testRoutesGetRouteProfileIDsAfterSet(t *testing.T) { t.Error(err) } else { sort.Strings(replyRouteProfileIDs) - if !utils.SliceStringEqual(replyRouteProfileIDs, expectedIDs) { + if !slices.Equal(replyRouteProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyRouteProfileIDs) } } @@ -370,7 +371,7 @@ func testRoutesGetRouteProfileIDsAfterSet(t *testing.T) { t.Error(err) } else { sort.Strings(replyRouteProfileIDs) - if !utils.SliceStringEqual(replyRouteProfileIDs, expectedIDs) { + if !slices.Equal(replyRouteProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyRouteProfileIDs) } } @@ -559,7 +560,7 @@ func testRoutesGetRouteProfileIDsAfterRemove(t *testing.T) { t.Error(err) } else { sort.Strings(replyRouteProfileIDs) - if !utils.SliceStringEqual(replyRouteProfileIDs, expectedIDs) { + if !slices.Equal(replyRouteProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyRouteProfileIDs) } } @@ -573,7 +574,7 @@ func testRoutesGetRouteProfileIDsAfterRemove(t *testing.T) { t.Error(err) } else { sort.Strings(replyRouteProfileIDs) - if !utils.SliceStringEqual(replyRouteProfileIDs, expectedIDs) { + if !slices.Equal(replyRouteProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyRouteProfileIDs) } } @@ -587,7 +588,7 @@ func testRoutesGetRouteProfileIDsAfterRemove(t *testing.T) { t.Error(err) } else { sort.Strings(replyRouteProfileIDs) - if !utils.SliceStringEqual(replyRouteProfileIDs, expectedIDs) { + if !slices.Equal(replyRouteProfileIDs, expectedIDs) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expectedIDs, replyRouteProfileIDs) } } @@ -728,7 +729,7 @@ func testRoutesBlockerRemoveRouteProfiles(t *testing.T) { t.Fatal(err) } else { sort.Strings(routeProfileIDs) - if !utils.SliceStringEqual(routeProfileIDs, expected) { + if !slices.Equal(routeProfileIDs, expected) { t.Errorf("expected: <%+v>, \nreceived: <%+v>", expected, routeProfileIDs) } } diff --git a/config/accountscfg.go b/config/accountscfg.go index b228dc187..0a91673a5 100644 --- a/config/accountscfg.go +++ b/config/accountscfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -106,19 +107,19 @@ func (acS *AccountSCfg) loadFromJSONCfg(jsnCfg *AccountSJsonCfg) (err error) { acS.ThresholdSConns = updateInternalConns(*jsnCfg.Thresholds_conns, utils.MetaThresholds) } if jsnCfg.String_indexed_fields != nil { - acS.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.String_indexed_fields)) + acS.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.String_indexed_fields)) } if jsnCfg.Prefix_indexed_fields != nil { - acS.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Prefix_indexed_fields)) + acS.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Prefix_indexed_fields)) } if jsnCfg.Suffix_indexed_fields != nil { - acS.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Suffix_indexed_fields)) + acS.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Suffix_indexed_fields)) } if jsnCfg.Exists_indexed_fields != nil { - acS.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Exists_indexed_fields)) + acS.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Exists_indexed_fields)) } if jsnCfg.Notexists_indexed_fields != nil { - acS.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Notexists_indexed_fields)) + acS.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Notexists_indexed_fields)) } if jsnCfg.Nested_fields != nil { acS.NestedFields = *jsnCfg.Nested_fields @@ -161,19 +162,19 @@ func (acS AccountSCfg) AsMapInterface(string) any { mp[utils.ThresholdSConnsCfg] = getInternalJSONConns(acS.ThresholdSConns) } if acS.StringIndexedFields != nil { - mp[utils.StringIndexedFieldsCfg] = utils.CloneStringSlice(*acS.StringIndexedFields) + mp[utils.StringIndexedFieldsCfg] = slices.Clone(*acS.StringIndexedFields) } if acS.PrefixIndexedFields != nil { - mp[utils.PrefixIndexedFieldsCfg] = utils.CloneStringSlice(*acS.PrefixIndexedFields) + mp[utils.PrefixIndexedFieldsCfg] = slices.Clone(*acS.PrefixIndexedFields) } if acS.SuffixIndexedFields != nil { - mp[utils.SuffixIndexedFieldsCfg] = utils.CloneStringSlice(*acS.SuffixIndexedFields) + mp[utils.SuffixIndexedFieldsCfg] = slices.Clone(*acS.SuffixIndexedFields) } if acS.ExistsIndexedFields != nil { - mp[utils.ExistsIndexedFieldsCfg] = utils.CloneStringSlice(*acS.ExistsIndexedFields) + mp[utils.ExistsIndexedFieldsCfg] = slices.Clone(*acS.ExistsIndexedFields) } if acS.NotExistsIndexedFields != nil { - mp[utils.NotExistsIndexedFieldsCfg] = utils.CloneStringSlice(*acS.NotExistsIndexedFields) + mp[utils.NotExistsIndexedFieldsCfg] = slices.Clone(*acS.NotExistsIndexedFields) } if acS.MaxUsage != nil { mp[utils.MaxUsage] = acS.MaxUsage.String() @@ -214,28 +215,28 @@ func (acS AccountSCfg) Clone() (cln *AccountSCfg) { Opts: acS.Opts.Clone(), } if acS.AttributeSConns != nil { - cln.AttributeSConns = utils.CloneStringSlice(acS.AttributeSConns) + cln.AttributeSConns = slices.Clone(acS.AttributeSConns) } if acS.RateSConns != nil { - cln.RateSConns = utils.CloneStringSlice(acS.RateSConns) + cln.RateSConns = slices.Clone(acS.RateSConns) } if acS.ThresholdSConns != nil { - cln.ThresholdSConns = utils.CloneStringSlice(acS.ThresholdSConns) + cln.ThresholdSConns = slices.Clone(acS.ThresholdSConns) } if acS.StringIndexedFields != nil { - cln.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*acS.StringIndexedFields)) + cln.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*acS.StringIndexedFields)) } if acS.PrefixIndexedFields != nil { - cln.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*acS.PrefixIndexedFields)) + cln.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*acS.PrefixIndexedFields)) } if acS.SuffixIndexedFields != nil { - cln.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*acS.SuffixIndexedFields)) + cln.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*acS.SuffixIndexedFields)) } if acS.ExistsIndexedFields != nil { - cln.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*acS.ExistsIndexedFields)) + cln.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*acS.ExistsIndexedFields)) } if acS.NotExistsIndexedFields != nil { - cln.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*acS.NotExistsIndexedFields)) + cln.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*acS.NotExistsIndexedFields)) } return } @@ -287,13 +288,13 @@ func diffAccountSJsonCfg(d *AccountSJsonCfg, v1, v2 *AccountSCfg) *AccountSJsonC if v1.Enabled != v2.Enabled { d.Enabled = utils.BoolPointer(v2.Enabled) } - if !utils.SliceStringEqual(v1.AttributeSConns, v2.AttributeSConns) { + if !slices.Equal(v1.AttributeSConns, v2.AttributeSConns) { d.Attributes_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AttributeSConns)) } - if !utils.SliceStringEqual(v1.RateSConns, v2.RateSConns) { + if !slices.Equal(v1.RateSConns, v2.RateSConns) { d.Rates_conns = utils.SliceStringPointer(getInternalJSONConns(v2.RateSConns)) } - if !utils.SliceStringEqual(v1.ThresholdSConns, v2.ThresholdSConns) { + if !slices.Equal(v1.ThresholdSConns, v2.ThresholdSConns) { d.Thresholds_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ThresholdSConns)) } if v1.IndexedSelects != v2.IndexedSelects { diff --git a/config/actionscfg.go b/config/actionscfg.go index 420d8a918..05f4fec74 100644 --- a/config/actionscfg.go +++ b/config/actionscfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "slices" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -100,25 +102,25 @@ func (acS *ActionSCfg) loadFromJSONCfg(jsnCfg *ActionSJsonCfg) (err error) { acS.AccountSConns = updateInternalConns(*jsnCfg.Accounts_conns, utils.MetaAccounts) } if jsnCfg.Tenants != nil { - acS.Tenants = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Tenants)) + acS.Tenants = utils.SliceStringPointer(slices.Clone(*jsnCfg.Tenants)) } if jsnCfg.Indexed_selects != nil { acS.IndexedSelects = *jsnCfg.Indexed_selects } if jsnCfg.String_indexed_fields != nil { - acS.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.String_indexed_fields)) + acS.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.String_indexed_fields)) } if jsnCfg.Prefix_indexed_fields != nil { - acS.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Prefix_indexed_fields)) + acS.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Prefix_indexed_fields)) } if jsnCfg.Suffix_indexed_fields != nil { - acS.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Suffix_indexed_fields)) + acS.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Suffix_indexed_fields)) } if jsnCfg.Exists_indexed_fields != nil { - acS.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Exists_indexed_fields)) + acS.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Exists_indexed_fields)) } if jsnCfg.Notexists_indexed_fields != nil { - acS.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Notexists_indexed_fields)) + acS.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Notexists_indexed_fields)) } if jsnCfg.Nested_fields != nil { acS.NestedFields = *jsnCfg.Nested_fields @@ -163,22 +165,22 @@ func (acS ActionSCfg) AsMapInterface(string) any { mp[utils.EEsConnsCfg] = getInternalJSONConns(acS.EEsConns) } if acS.Tenants != nil { - mp[utils.Tenants] = utils.CloneStringSlice(*acS.Tenants) + mp[utils.Tenants] = slices.Clone(*acS.Tenants) } if acS.StringIndexedFields != nil { - mp[utils.StringIndexedFieldsCfg] = utils.CloneStringSlice(*acS.StringIndexedFields) + mp[utils.StringIndexedFieldsCfg] = slices.Clone(*acS.StringIndexedFields) } if acS.PrefixIndexedFields != nil { - mp[utils.PrefixIndexedFieldsCfg] = utils.CloneStringSlice(*acS.PrefixIndexedFields) + mp[utils.PrefixIndexedFieldsCfg] = slices.Clone(*acS.PrefixIndexedFields) } if acS.SuffixIndexedFields != nil { - mp[utils.SuffixIndexedFieldsCfg] = utils.CloneStringSlice(*acS.SuffixIndexedFields) + mp[utils.SuffixIndexedFieldsCfg] = slices.Clone(*acS.SuffixIndexedFields) } if acS.ExistsIndexedFields != nil { - mp[utils.ExistsIndexedFieldsCfg] = utils.CloneStringSlice(*acS.ExistsIndexedFields) + mp[utils.ExistsIndexedFieldsCfg] = slices.Clone(*acS.ExistsIndexedFields) } if acS.NotExistsIndexedFields != nil { - mp[utils.NotExistsIndexedFieldsCfg] = utils.CloneStringSlice(*acS.NotExistsIndexedFields) + mp[utils.NotExistsIndexedFieldsCfg] = slices.Clone(*acS.NotExistsIndexedFields) } return mp } @@ -215,37 +217,37 @@ func (acS ActionSCfg) Clone() (cln *ActionSCfg) { Opts: acS.Opts.Clone(), } if acS.CDRsConns != nil { - cln.CDRsConns = utils.CloneStringSlice(acS.CDRsConns) + cln.CDRsConns = slices.Clone(acS.CDRsConns) } if acS.ThresholdSConns != nil { - cln.ThresholdSConns = utils.CloneStringSlice(acS.ThresholdSConns) + cln.ThresholdSConns = slices.Clone(acS.ThresholdSConns) } if acS.StatSConns != nil { - cln.StatSConns = utils.CloneStringSlice(acS.StatSConns) + cln.StatSConns = slices.Clone(acS.StatSConns) } if acS.AccountSConns != nil { - cln.AccountSConns = utils.CloneStringSlice(acS.AccountSConns) + cln.AccountSConns = slices.Clone(acS.AccountSConns) } if acS.EEsConns != nil { - cln.EEsConns = utils.CloneStringSlice(acS.EEsConns) + cln.EEsConns = slices.Clone(acS.EEsConns) } if acS.Tenants != nil { - cln.Tenants = utils.SliceStringPointer(utils.CloneStringSlice(*acS.Tenants)) + cln.Tenants = utils.SliceStringPointer(slices.Clone(*acS.Tenants)) } if acS.StringIndexedFields != nil { - cln.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*acS.StringIndexedFields)) + cln.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*acS.StringIndexedFields)) } if acS.PrefixIndexedFields != nil { - cln.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*acS.PrefixIndexedFields)) + cln.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*acS.PrefixIndexedFields)) } if acS.SuffixIndexedFields != nil { - cln.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*acS.SuffixIndexedFields)) + cln.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*acS.SuffixIndexedFields)) } if acS.ExistsIndexedFields != nil { - cln.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*acS.ExistsIndexedFields)) + cln.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*acS.ExistsIndexedFields)) } if acS.NotExistsIndexedFields != nil { - cln.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*acS.NotExistsIndexedFields)) + cln.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*acS.NotExistsIndexedFields)) } if acS.DynaprepaidActionProfile != nil { cln.DynaprepaidActionProfile = make([]string, len(acS.DynaprepaidActionProfile)) @@ -303,24 +305,24 @@ func diffActionSJsonCfg(d *ActionSJsonCfg, v1, v2 *ActionSCfg) *ActionSJsonCfg { if v1.Enabled != v2.Enabled { d.Enabled = utils.BoolPointer(v2.Enabled) } - if !utils.SliceStringEqual(v1.CDRsConns, v2.CDRsConns) { + if !slices.Equal(v1.CDRsConns, v2.CDRsConns) { d.Cdrs_conns = utils.SliceStringPointer(getInternalJSONConns(v2.CDRsConns)) } - if !utils.SliceStringEqual(v1.EEsConns, v2.EEsConns) { + if !slices.Equal(v1.EEsConns, v2.EEsConns) { d.Ees_conns = utils.SliceStringPointer(getInternalJSONConns(v2.EEsConns)) } - if !utils.SliceStringEqual(v1.ThresholdSConns, v2.ThresholdSConns) { + if !slices.Equal(v1.ThresholdSConns, v2.ThresholdSConns) { d.Thresholds_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ThresholdSConns)) } - if !utils.SliceStringEqual(v1.StatSConns, v2.StatSConns) { + if !slices.Equal(v1.StatSConns, v2.StatSConns) { d.Stats_conns = utils.SliceStringPointer(getInternalJSONConns(v2.StatSConns)) } - if !utils.SliceStringEqual(v1.AccountSConns, v2.AccountSConns) { + if !slices.Equal(v1.AccountSConns, v2.AccountSConns) { d.Accounts_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AccountSConns)) } if v1.Tenants != v2.Tenants { - d.Tenants = utils.SliceStringPointer(utils.CloneStringSlice(*v2.Tenants)) + d.Tenants = utils.SliceStringPointer(slices.Clone(*v2.Tenants)) } if v1.IndexedSelects != v2.IndexedSelects { d.Indexed_selects = utils.BoolPointer(v2.IndexedSelects) @@ -333,7 +335,7 @@ func diffActionSJsonCfg(d *ActionSJsonCfg, v1, v2 *ActionSCfg) *ActionSJsonCfg { if v1.NestedFields != v2.NestedFields { d.Nested_fields = utils.BoolPointer(v2.NestedFields) } - if !utils.SliceStringEqual(v1.DynaprepaidActionProfile, v2.DynaprepaidActionProfile) { + if !slices.Equal(v1.DynaprepaidActionProfile, v2.DynaprepaidActionProfile) { d.Dynaprepaid_actionprofile = utils.SliceStringPointer(getInternalJSONConns(v2.DynaprepaidActionProfile)) } d.Opts = diffActionsOptsJsonCfg(d.Opts, v1.Opts, v2.Opts) diff --git a/config/adminscfg.go b/config/adminscfg.go index 1972a1379..8cbf03abb 100644 --- a/config/adminscfg.go +++ b/config/adminscfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "slices" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -92,16 +94,16 @@ func (aCfg AdminSCfg) Clone() (cln *AdminSCfg) { Enabled: aCfg.Enabled, } if aCfg.CachesConns != nil { - cln.CachesConns = utils.CloneStringSlice(aCfg.CachesConns) + cln.CachesConns = slices.Clone(aCfg.CachesConns) } if aCfg.ActionSConns != nil { - cln.ActionSConns = utils.CloneStringSlice(aCfg.ActionSConns) + cln.ActionSConns = slices.Clone(aCfg.ActionSConns) } if aCfg.AttributeSConns != nil { - cln.AttributeSConns = utils.CloneStringSlice(aCfg.AttributeSConns) + cln.AttributeSConns = slices.Clone(aCfg.AttributeSConns) } if aCfg.EEsConns != nil { - cln.EEsConns = utils.CloneStringSlice(aCfg.EEsConns) + cln.EEsConns = slices.Clone(aCfg.EEsConns) } return } @@ -121,16 +123,16 @@ func diffAdminSJsonCfg(d *AdminSJsonCfg, v1, v2 *AdminSCfg) *AdminSJsonCfg { if v1.Enabled != v2.Enabled { d.Enabled = utils.BoolPointer(v2.Enabled) } - if !utils.SliceStringEqual(v1.CachesConns, v2.CachesConns) { + if !slices.Equal(v1.CachesConns, v2.CachesConns) { d.Caches_conns = utils.SliceStringPointer(getInternalJSONConns(v2.CachesConns)) } - if !utils.SliceStringEqual(v1.ActionSConns, v2.ActionSConns) { + if !slices.Equal(v1.ActionSConns, v2.ActionSConns) { d.Actions_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ActionSConns)) } - if !utils.SliceStringEqual(v1.AttributeSConns, v2.AttributeSConns) { + if !slices.Equal(v1.AttributeSConns, v2.AttributeSConns) { d.Attributes_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AttributeSConns)) } - if !utils.SliceStringEqual(v1.EEsConns, v2.EEsConns) { + if !slices.Equal(v1.EEsConns, v2.EEsConns) { d.Ees_conns = utils.SliceStringPointer(getInternalJSONConns(v2.EEsConns)) } return d diff --git a/config/analyzerscfg.go b/config/analyzerscfg.go index 79fbb57a0..ad83f62f5 100644 --- a/config/analyzerscfg.go +++ b/config/analyzerscfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -123,7 +124,7 @@ func (alS AnalyzerSCfg) Clone() (cln *AnalyzerSCfg) { Opts: alS.Opts.Clone(), } if alS.EEsConns != nil { - cln.EEsConns = utils.CloneStringSlice(alS.EEsConns) + cln.EEsConns = slices.Clone(alS.EEsConns) } return } @@ -178,7 +179,7 @@ func diffAnalyzerSJsonCfg(d *AnalyzerSJsonCfg, v1, v2 *AnalyzerSCfg) *AnalyzerSJ if v1.TTL != v2.TTL { d.Ttl = utils.StringPointer(v2.TTL.String()) } - if !utils.SliceStringEqual(v1.EEsConns, v2.EEsConns) { + if !slices.Equal(v1.EEsConns, v2.EEsConns) { d.Ees_conns = utils.SliceStringPointer(getBiRPCInternalJSONConns(v2.EEsConns)) } if v1.CleanupInterval != v2.CleanupInterval { diff --git a/config/apibancfg.go b/config/apibancfg.go index 64b620b12..e5df6d6db 100644 --- a/config/apibancfg.go +++ b/config/apibancfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "slices" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -46,7 +48,7 @@ func (ban *APIBanCfg) loadFromJSONCfg(jsnCfg *APIBanJsonCfg) (err error) { ban.Enabled = *jsnCfg.Enabled } if jsnCfg.Keys != nil { - ban.Keys = utils.CloneStringSlice(*jsnCfg.Keys) + ban.Keys = slices.Clone(*jsnCfg.Keys) } return nil } @@ -66,7 +68,7 @@ func (ban APIBanCfg) CloneSection() Section { return ban.Clone() } func (ban APIBanCfg) Clone() (cln *APIBanCfg) { return &APIBanCfg{ Enabled: ban.Enabled, - Keys: utils.CloneStringSlice(ban.Keys), + Keys: slices.Clone(ban.Keys), } } @@ -82,7 +84,7 @@ func diffAPIBanJsonCfg(d *APIBanJsonCfg, v1, v2 *APIBanCfg) *APIBanJsonCfg { if v1.Enabled != v2.Enabled { d.Enabled = utils.BoolPointer(v2.Enabled) } - if !utils.SliceStringEqual(v1.Keys, v2.Keys) { + if !slices.Equal(v1.Keys, v2.Keys) { d.Keys = &v2.Keys } return d diff --git a/config/asteriskagntcfg.go b/config/asteriskagntcfg.go index 41e223485..d12aafa71 100644 --- a/config/asteriskagntcfg.go +++ b/config/asteriskagntcfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -162,7 +163,7 @@ func (aCfg AsteriskAgentCfg) Clone() (cln *AsteriskAgentCfg) { CreateCDR: aCfg.CreateCDR, } if aCfg.SessionSConns != nil { - cln.SessionSConns = utils.CloneStringSlice(aCfg.SessionSConns) + cln.SessionSConns = slices.Clone(aCfg.SessionSConns) } if aCfg.AsteriskConns != nil { cln.AsteriskConns = make([]*AsteriskConnCfg, len(aCfg.AsteriskConns)) @@ -241,7 +242,7 @@ func diffAsteriskAgentJsonCfg(d *AsteriskAgentJsonCfg, v1, v2 *AsteriskAgentCfg) if v1.Enabled != v2.Enabled { d.Enabled = utils.BoolPointer(v2.Enabled) } - if !utils.SliceStringEqual(v1.SessionSConns, v2.SessionSConns) { + if !slices.Equal(v1.SessionSConns, v2.SessionSConns) { d.Sessions_conns = utils.SliceStringPointer(getBiRPCInternalJSONConns(v2.SessionSConns)) } if v1.CreateCDR != v2.CreateCDR { diff --git a/config/attributescfg.go b/config/attributescfg.go index bb2bc986c..2000f909e 100644 --- a/config/attributescfg.go +++ b/config/attributescfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "slices" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -101,19 +103,19 @@ func (alS *AttributeSCfg) loadFromJSONCfg(jsnCfg *AttributeSJsonCfg) (err error) alS.IndexedSelects = *jsnCfg.Indexed_selects } if jsnCfg.String_indexed_fields != nil { - alS.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.String_indexed_fields)) + alS.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.String_indexed_fields)) } if jsnCfg.Prefix_indexed_fields != nil { - alS.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Prefix_indexed_fields)) + alS.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Prefix_indexed_fields)) } if jsnCfg.Suffix_indexed_fields != nil { - alS.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Suffix_indexed_fields)) + alS.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Suffix_indexed_fields)) } if jsnCfg.Exists_indexed_fields != nil { - alS.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Exists_indexed_fields)) + alS.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Exists_indexed_fields)) } if jsnCfg.Notexists_indexed_fields != nil { - alS.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Notexists_indexed_fields)) + alS.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Notexists_indexed_fields)) } if jsnCfg.Nested_fields != nil { alS.NestedFields = *jsnCfg.Nested_fields @@ -139,19 +141,19 @@ func (alS AttributeSCfg) AsMapInterface(string) any { utils.OptsCfg: opts, } if alS.StringIndexedFields != nil { - mp[utils.StringIndexedFieldsCfg] = utils.CloneStringSlice(*alS.StringIndexedFields) + mp[utils.StringIndexedFieldsCfg] = slices.Clone(*alS.StringIndexedFields) } if alS.PrefixIndexedFields != nil { - mp[utils.PrefixIndexedFieldsCfg] = utils.CloneStringSlice(*alS.PrefixIndexedFields) + mp[utils.PrefixIndexedFieldsCfg] = slices.Clone(*alS.PrefixIndexedFields) } if alS.SuffixIndexedFields != nil { - mp[utils.SuffixIndexedFieldsCfg] = utils.CloneStringSlice(*alS.SuffixIndexedFields) + mp[utils.SuffixIndexedFieldsCfg] = slices.Clone(*alS.SuffixIndexedFields) } if alS.ExistsIndexedFields != nil { - mp[utils.ExistsIndexedFieldsCfg] = utils.CloneStringSlice(*alS.ExistsIndexedFields) + mp[utils.ExistsIndexedFieldsCfg] = slices.Clone(*alS.ExistsIndexedFields) } if alS.NotExistsIndexedFields != nil { - mp[utils.NotExistsIndexedFieldsCfg] = utils.CloneStringSlice(*alS.NotExistsIndexedFields) + mp[utils.NotExistsIndexedFieldsCfg] = slices.Clone(*alS.NotExistsIndexedFields) } if alS.StatSConns != nil { mp[utils.StatSConnsCfg] = getInternalJSONConns(alS.StatSConns) @@ -202,29 +204,29 @@ func (alS AttributeSCfg) Clone() (cln *AttributeSCfg) { Opts: alS.Opts.Clone(), } if alS.ResourceSConns != nil { - cln.ResourceSConns = utils.CloneStringSlice(alS.ResourceSConns) + cln.ResourceSConns = slices.Clone(alS.ResourceSConns) } if alS.StatSConns != nil { - cln.StatSConns = utils.CloneStringSlice(alS.StatSConns) + cln.StatSConns = slices.Clone(alS.StatSConns) } if alS.AccountSConns != nil { - cln.AccountSConns = utils.CloneStringSlice(alS.AccountSConns) + cln.AccountSConns = slices.Clone(alS.AccountSConns) } if alS.StringIndexedFields != nil { - cln.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*alS.StringIndexedFields)) + cln.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*alS.StringIndexedFields)) } if alS.PrefixIndexedFields != nil { - cln.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*alS.PrefixIndexedFields)) + cln.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*alS.PrefixIndexedFields)) } if alS.SuffixIndexedFields != nil { - cln.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*alS.SuffixIndexedFields)) + cln.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*alS.SuffixIndexedFields)) } if alS.ExistsIndexedFields != nil { - cln.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*alS.ExistsIndexedFields)) + cln.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*alS.ExistsIndexedFields)) } if alS.NotExistsIndexedFields != nil { - cln.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*alS.NotExistsIndexedFields)) + cln.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*alS.NotExistsIndexedFields)) } return } @@ -278,13 +280,13 @@ func diffAttributeSJsonCfg(d *AttributeSJsonCfg, v1, v2 *AttributeSCfg) *Attribu if v1.Enabled != v2.Enabled { d.Enabled = utils.BoolPointer(v2.Enabled) } - if !utils.SliceStringEqual(v1.ResourceSConns, v2.ResourceSConns) { + if !slices.Equal(v1.ResourceSConns, v2.ResourceSConns) { d.Stats_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ResourceSConns)) } - if !utils.SliceStringEqual(v1.StatSConns, v2.StatSConns) { + if !slices.Equal(v1.StatSConns, v2.StatSConns) { d.Resources_conns = utils.SliceStringPointer(getInternalJSONConns(v2.StatSConns)) } - if !utils.SliceStringEqual(v1.AccountSConns, v2.AccountSConns) { + if !slices.Equal(v1.AccountSConns, v2.AccountSConns) { d.Accounts_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AccountSConns)) } if v1.IndexedSelects != v2.IndexedSelects { @@ -306,8 +308,8 @@ func diffIndexSlice(d, v1, v2 *[]string) *[]string { if v2 == nil { return nil } - if v1 == nil || !utils.SliceStringEqual(*v1, *v2) { - d = utils.SliceStringPointer(utils.CloneStringSlice(*v2)) + if v1 == nil || !slices.Equal(*v1, *v2) { + d = utils.SliceStringPointer(slices.Clone(*v2)) } return d } diff --git a/config/cachecfg.go b/config/cachecfg.go index c29d7b3a9..a11bf9411 100644 --- a/config/cachecfg.go +++ b/config/cachecfg.go @@ -20,6 +20,7 @@ package config import ( "fmt" + "slices" "time" "github.com/cgrates/birpc/context" @@ -175,10 +176,10 @@ func (cCfg CacheCfg) Clone() (cln *CacheCfg) { cln.Partitions[key] = par.Clone() } if cCfg.ReplicationConns != nil { - cln.ReplicationConns = utils.CloneStringSlice(cCfg.ReplicationConns) + cln.ReplicationConns = slices.Clone(cCfg.ReplicationConns) } if cCfg.RemoteConns != nil { - cln.RemoteConns = utils.CloneStringSlice(cCfg.RemoteConns) + cln.RemoteConns = slices.Clone(cCfg.RemoteConns) } return } @@ -220,10 +221,10 @@ func diffCacheJsonCfg(d *CacheJsonCfg, v1, v2 *CacheCfg) *CacheJsonCfg { d = new(CacheJsonCfg) } d.Partitions = diffCacheParamsJsonCfg(d.Partitions, v2.Partitions) - if !utils.SliceStringEqual(v1.ReplicationConns, v2.ReplicationConns) { + if !slices.Equal(v1.ReplicationConns, v2.ReplicationConns) { d.Replication_conns = &v2.ReplicationConns } - if !utils.SliceStringEqual(v1.RemoteConns, v2.RemoteConns) { + if !slices.Equal(v1.RemoteConns, v2.RemoteConns) { d.Remote_conns = &v2.RemoteConns } return d diff --git a/config/cdrscfg.go b/config/cdrscfg.go index 35ab2c4c5..18458ab07 100644 --- a/config/cdrscfg.go +++ b/config/cdrscfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "slices" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -165,7 +167,7 @@ func (cdrscfg CdrsCfg) AsMapInterface(string) any { utils.SMCostRetriesCfg: cdrscfg.SMCostRetries, utils.StoreCdrsCfg: cdrscfg.StoreCdrs, utils.ExtraFieldsCfg: cdrscfg.ExtraFields.AsStringSlice(), - utils.OnlineCDRExportsCfg: utils.CloneStringSlice(cdrscfg.OnlineCDRExports), + utils.OnlineCDRExportsCfg: slices.Clone(cdrscfg.OnlineCDRExports), utils.OptsCfg: opts, } @@ -249,31 +251,31 @@ func (cdrscfg CdrsCfg) Clone() (cln *CdrsCfg) { Opts: cdrscfg.Opts.Clone(), } if cdrscfg.ChargerSConns != nil { - cln.ChargerSConns = utils.CloneStringSlice(cdrscfg.ChargerSConns) + cln.ChargerSConns = slices.Clone(cdrscfg.ChargerSConns) } if cdrscfg.AttributeSConns != nil { - cln.AttributeSConns = utils.CloneStringSlice(cdrscfg.AttributeSConns) + cln.AttributeSConns = slices.Clone(cdrscfg.AttributeSConns) } if cdrscfg.ThresholdSConns != nil { - cln.ThresholdSConns = utils.CloneStringSlice(cdrscfg.ThresholdSConns) + cln.ThresholdSConns = slices.Clone(cdrscfg.ThresholdSConns) } if cdrscfg.StatSConns != nil { - cln.StatSConns = utils.CloneStringSlice(cdrscfg.StatSConns) + cln.StatSConns = slices.Clone(cdrscfg.StatSConns) } if cdrscfg.OnlineCDRExports != nil { - cln.OnlineCDRExports = utils.CloneStringSlice(cdrscfg.OnlineCDRExports) + cln.OnlineCDRExports = slices.Clone(cdrscfg.OnlineCDRExports) } if cdrscfg.ActionSConns != nil { - cln.ActionSConns = utils.CloneStringSlice(cdrscfg.ActionSConns) + cln.ActionSConns = slices.Clone(cdrscfg.ActionSConns) } if cdrscfg.EEsConns != nil { - cln.EEsConns = utils.CloneStringSlice(cdrscfg.EEsConns) + cln.EEsConns = slices.Clone(cdrscfg.EEsConns) } if cdrscfg.RateSConns != nil { - cln.RateSConns = utils.CloneStringSlice(cdrscfg.RateSConns) + cln.RateSConns = slices.Clone(cdrscfg.RateSConns) } if cdrscfg.AccountSConns != nil { - cln.AccountSConns = utils.CloneStringSlice(cdrscfg.AccountSConns) + cln.AccountSConns = slices.Clone(cdrscfg.AccountSConns) } return @@ -344,7 +346,7 @@ func diffCdrsJsonCfg(d *CdrsJsonCfg, v1, v2 *CdrsCfg) *CdrsJsonCfg { } extra1 := v1.ExtraFields.AsStringSlice() extra2 := v2.ExtraFields.AsStringSlice() - if !utils.SliceStringEqual(extra1, extra2) { + if !slices.Equal(extra1, extra2) { d.Extra_fields = &extra2 } if v1.StoreCdrs != v2.StoreCdrs { @@ -353,31 +355,31 @@ func diffCdrsJsonCfg(d *CdrsJsonCfg, v1, v2 *CdrsCfg) *CdrsJsonCfg { if v1.SMCostRetries != v2.SMCostRetries { d.Session_cost_retries = utils.IntPointer(v2.SMCostRetries) } - if !utils.SliceStringEqual(v1.ChargerSConns, v2.ChargerSConns) { + if !slices.Equal(v1.ChargerSConns, v2.ChargerSConns) { d.Chargers_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ChargerSConns)) } - if !utils.SliceStringEqual(v1.AttributeSConns, v2.AttributeSConns) { + if !slices.Equal(v1.AttributeSConns, v2.AttributeSConns) { d.Attributes_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AttributeSConns)) } - if !utils.SliceStringEqual(v1.ThresholdSConns, v2.ThresholdSConns) { + if !slices.Equal(v1.ThresholdSConns, v2.ThresholdSConns) { d.Thresholds_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ThresholdSConns)) } - if !utils.SliceStringEqual(v1.StatSConns, v2.StatSConns) { + if !slices.Equal(v1.StatSConns, v2.StatSConns) { d.Stats_conns = utils.SliceStringPointer(getInternalJSONConns(v2.StatSConns)) } - if !utils.SliceStringEqual(v1.OnlineCDRExports, v2.OnlineCDRExports) { + if !slices.Equal(v1.OnlineCDRExports, v2.OnlineCDRExports) { d.Online_cdr_exports = &v2.OnlineCDRExports } - if !utils.SliceStringEqual(v1.ActionSConns, v2.ActionSConns) { + if !slices.Equal(v1.ActionSConns, v2.ActionSConns) { d.Actions_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ActionSConns)) } - if !utils.SliceStringEqual(v1.EEsConns, v2.EEsConns) { + if !slices.Equal(v1.EEsConns, v2.EEsConns) { d.Ees_conns = utils.SliceStringPointer(getInternalJSONConns(v2.EEsConns)) } - if !utils.SliceStringEqual(v1.RateSConns, v2.RateSConns) { + if !slices.Equal(v1.RateSConns, v2.RateSConns) { d.Rates_conns = utils.SliceStringPointer(getInternalJSONConns(v2.RateSConns)) } - if !utils.SliceStringEqual(v1.AccountSConns, v2.AccountSConns) { + if !slices.Equal(v1.AccountSConns, v2.AccountSConns) { d.Accounts_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AccountSConns)) } d.Opts = diffCdrsOptsJsonCfg(d.Opts, v1.Opts, v2.Opts) diff --git a/config/chargerscfg.go b/config/chargerscfg.go index 2f7a7942c..87cf0f9c0 100644 --- a/config/chargerscfg.go +++ b/config/chargerscfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "slices" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -59,19 +61,19 @@ func (cS *ChargerSCfg) loadFromJSONCfg(jsnCfg *ChargerSJsonCfg) (err error) { cS.AttributeSConns = updateInternalConns(*jsnCfg.Attributes_conns, utils.MetaAttributes) } if jsnCfg.String_indexed_fields != nil { - cS.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.String_indexed_fields)) + cS.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.String_indexed_fields)) } if jsnCfg.Prefix_indexed_fields != nil { - cS.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Prefix_indexed_fields)) + cS.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Prefix_indexed_fields)) } if jsnCfg.Suffix_indexed_fields != nil { - cS.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Suffix_indexed_fields)) + cS.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Suffix_indexed_fields)) } if jsnCfg.Exists_indexed_fields != nil { - cS.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Exists_indexed_fields)) + cS.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Exists_indexed_fields)) } if jsnCfg.Notexists_indexed_fields != nil { - cS.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Notexists_indexed_fields)) + cS.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Notexists_indexed_fields)) } if jsnCfg.Nested_fields != nil { cS.NestedFields = *jsnCfg.Nested_fields @@ -90,19 +92,19 @@ func (cS ChargerSCfg) AsMapInterface(string) any { mp[utils.AttributeSConnsCfg] = getInternalJSONConns(cS.AttributeSConns) } if cS.StringIndexedFields != nil { - mp[utils.StringIndexedFieldsCfg] = utils.CloneStringSlice(*cS.StringIndexedFields) + mp[utils.StringIndexedFieldsCfg] = slices.Clone(*cS.StringIndexedFields) } if cS.PrefixIndexedFields != nil { - mp[utils.PrefixIndexedFieldsCfg] = utils.CloneStringSlice(*cS.PrefixIndexedFields) + mp[utils.PrefixIndexedFieldsCfg] = slices.Clone(*cS.PrefixIndexedFields) } if cS.SuffixIndexedFields != nil { - mp[utils.SuffixIndexedFieldsCfg] = utils.CloneStringSlice(*cS.SuffixIndexedFields) + mp[utils.SuffixIndexedFieldsCfg] = slices.Clone(*cS.SuffixIndexedFields) } if cS.ExistsIndexedFields != nil { - mp[utils.ExistsIndexedFieldsCfg] = utils.CloneStringSlice(*cS.ExistsIndexedFields) + mp[utils.ExistsIndexedFieldsCfg] = slices.Clone(*cS.ExistsIndexedFields) } if cS.NotExistsIndexedFields != nil { - mp[utils.NotExistsIndexedFieldsCfg] = utils.CloneStringSlice(*cS.NotExistsIndexedFields) + mp[utils.NotExistsIndexedFieldsCfg] = slices.Clone(*cS.NotExistsIndexedFields) } return mp } @@ -118,23 +120,23 @@ func (cS ChargerSCfg) Clone() (cln *ChargerSCfg) { NestedFields: cS.NestedFields, } if cS.AttributeSConns != nil { - cln.AttributeSConns = utils.CloneStringSlice(cS.AttributeSConns) + cln.AttributeSConns = slices.Clone(cS.AttributeSConns) } if cS.StringIndexedFields != nil { - cln.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*cS.StringIndexedFields)) + cln.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*cS.StringIndexedFields)) } if cS.PrefixIndexedFields != nil { - cln.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*cS.PrefixIndexedFields)) + cln.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*cS.PrefixIndexedFields)) } if cS.SuffixIndexedFields != nil { - cln.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*cS.SuffixIndexedFields)) + cln.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*cS.SuffixIndexedFields)) } if cS.ExistsIndexedFields != nil { - cln.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*cS.ExistsIndexedFields)) + cln.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*cS.ExistsIndexedFields)) } if cS.NotExistsIndexedFields != nil { - cln.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*cS.NotExistsIndexedFields)) + cln.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*cS.NotExistsIndexedFields)) } return } @@ -162,7 +164,7 @@ func diffChargerSJsonCfg(d *ChargerSJsonCfg, v1, v2 *ChargerSCfg) *ChargerSJsonC if v1.IndexedSelects != v2.IndexedSelects { d.Indexed_selects = utils.BoolPointer(v2.IndexedSelects) } - if !utils.SliceStringEqual(v1.AttributeSConns, v2.AttributeSConns) { + if !slices.Equal(v1.AttributeSConns, v2.AttributeSConns) { d.Attributes_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AttributeSConns)) } d.String_indexed_fields = diffIndexSlice(d.String_indexed_fields, v1.StringIndexedFields, v2.StringIndexedFields) diff --git a/config/configsanity.go b/config/configsanity.go index 70f2b022f..a04d588c9 100644 --- a/config/configsanity.go +++ b/config/configsanity.go @@ -23,6 +23,7 @@ import ( "math" "os" "path" + "slices" "strings" "github.com/cgrates/cgrates/utils" @@ -450,10 +451,10 @@ func (cfg *CGRConfig) checkConfigSanity() error { return fmt.Errorf("<%s> template with ID <%s> has connection with id: <%s> not defined", utils.HTTPAgent, httpAgentCfg.ID, connID) } } - if !utils.SliceHasMember([]string{utils.MetaUrl, utils.MetaXml}, httpAgentCfg.RequestPayload) { + if !slices.Contains([]string{utils.MetaUrl, utils.MetaXml}, httpAgentCfg.RequestPayload) { return fmt.Errorf("<%s> unsupported request payload %s", utils.HTTPAgent, httpAgentCfg.RequestPayload) } - if !utils.SliceHasMember([]string{utils.MetaTextPlain, utils.MetaXml}, httpAgentCfg.ReplyPayload) { + if !slices.Contains([]string{utils.MetaTextPlain, utils.MetaXml}, httpAgentCfg.ReplyPayload) { return fmt.Errorf("<%s> unsupported reply payload %s", utils.HTTPAgent, httpAgentCfg.ReplyPayload) } for _, req := range httpAgentCfg.RequestProcessors { @@ -746,7 +747,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } // The following sanity check prevents a "slice bounds out of range" panic. if rdr.Type == utils.MetaFileXML && len(field.Value) != 0 && - !utils.IsSliceMember([]string{utils.MetaNone, utils.MetaConstant}, field.Type) { + !slices.Contains([]string{utils.MetaNone, utils.MetaConstant}, field.Type) { // Find the minimum rule length for dynamic RSRParser within the field value. minRuleLength := math.MaxInt @@ -857,7 +858,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { // StorDB sanity checks if cfg.storDbCfg.Type == utils.Postgres { - if !utils.IsSliceMember([]string{utils.PostgresSSLModeDisable, utils.PostgresSSLModeAllow, + if !slices.Contains([]string{utils.PostgresSSLModeDisable, utils.PostgresSSLModeAllow, utils.PostgresSSLModePrefer, utils.PostgresSSLModeRequire, utils.PostgresSSLModeVerifyCa, utils.PostgresSSLModeVerifyFull}, cfg.storDbCfg.Opts.PgSSLMode) { return fmt.Errorf("<%s> unsupported ssl mode for storDB", utils.StorDB) @@ -1006,7 +1007,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for tnt, hosts := range cfg.registrarCCfg.Dispatchers.Hosts { for _, host := range hosts { - if !utils.SliceHasMember([]string{utils.MetaGOB, rpcclient.HTTPjson, utils.MetaJSON, rpcclient.BiRPCJSON, rpcclient.BiRPCGOB}, host.Transport) { + if !slices.Contains([]string{utils.MetaGOB, rpcclient.HTTPjson, utils.MetaJSON, rpcclient.BiRPCJSON, rpcclient.BiRPCGOB}, host.Transport) { return fmt.Errorf("<%s> unsupported transport <%s> for host <%s>", utils.RegistrarC, host.Transport, utils.ConcatenatedKey(tnt, host.ID)) } } @@ -1037,7 +1038,7 @@ func (cfg *CGRConfig) checkConfigSanity() error { } for tnt, hosts := range cfg.registrarCCfg.RPC.Hosts { for _, host := range hosts { - if !utils.SliceHasMember([]string{utils.MetaGOB, rpcclient.HTTPjson, utils.MetaJSON, rpcclient.BiRPCJSON, rpcclient.BiRPCGOB}, host.Transport) { + if !slices.Contains([]string{utils.MetaGOB, rpcclient.HTTPjson, utils.MetaJSON, rpcclient.BiRPCJSON, rpcclient.BiRPCGOB}, host.Transport) { return fmt.Errorf("<%s> unsupported transport <%s> for host <%s>", utils.RegistrarC, host.Transport, utils.ConcatenatedKey(tnt, host.ID)) } } diff --git a/config/corescfg.go b/config/corescfg.go index aca8624c1..c73dcb7b4 100644 --- a/config/corescfg.go +++ b/config/corescfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -101,7 +102,7 @@ func (cS CoreSCfg) Clone() (cln *CoreSCfg) { ShutdownTimeout: cS.ShutdownTimeout, } if cS.EEsConns != nil { - cln.EEsConns = utils.CloneStringSlice(cS.EEsConns) + cln.EEsConns = slices.Clone(cS.EEsConns) } return @@ -128,7 +129,7 @@ func diffCoreSJsonCfg(d *CoreSJsonCfg, v1, v2 *CoreSCfg) *CoreSJsonCfg { if v1.CapsStatsInterval != v2.CapsStatsInterval { d.Caps_stats_interval = utils.StringPointer(v2.CapsStatsInterval.String()) } - if !utils.SliceStringEqual(v1.EEsConns, v2.EEsConns) { + if !slices.Equal(v1.EEsConns, v2.EEsConns) { d.Ees_conns = utils.SliceStringPointer(getInternalJSONConns(v2.EEsConns)) } if v1.ShutdownTimeout != v2.ShutdownTimeout { diff --git a/config/datadbcfg.go b/config/datadbcfg.go index 22a6e6438..7dd3bb404 100644 --- a/config/datadbcfg.go +++ b/config/datadbcfg.go @@ -20,6 +20,7 @@ package config import ( "fmt" + "slices" "strconv" "strings" "time" @@ -280,10 +281,10 @@ func (dbcfg DataDbCfg) Clone() (cln *DataDbCfg) { cln.Items[k] = itm.Clone() } if dbcfg.RmtConns != nil { - cln.RmtConns = utils.CloneStringSlice(dbcfg.RmtConns) + cln.RmtConns = slices.Clone(dbcfg.RmtConns) } if dbcfg.RplConns != nil { - cln.RplConns = utils.CloneStringSlice(dbcfg.RplConns) + cln.RplConns = slices.Clone(dbcfg.RplConns) } return } @@ -584,13 +585,13 @@ func diffDataDBJsonCfg(d *DbJsonCfg, v1, v2 *DataDbCfg) *DbJsonCfg { if v1.Password != v2.Password { d.Db_password = utils.StringPointer(v2.Password) } - if !utils.SliceStringEqual(v1.RmtConns, v2.RmtConns) { + if !slices.Equal(v1.RmtConns, v2.RmtConns) { d.Remote_conns = &v2.RmtConns } if v1.RmtConnID != v2.RmtConnID { d.Remote_conn_id = utils.StringPointer(v2.RmtConnID) } - if !utils.SliceStringEqual(v1.RplConns, v2.RplConns) { + if !slices.Equal(v1.RplConns, v2.RplConns) { d.Replication_conns = &v2.RplConns } if v1.RplFiltered != v2.RplFiltered { diff --git a/config/diametercfg.go b/config/diametercfg.go index 0a547b7d3..1c5706fc0 100644 --- a/config/diametercfg.go +++ b/config/diametercfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "slices" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -152,7 +154,7 @@ func (da DiameterAgentCfg) Clone() (cln *DiameterAgentCfg) { ForcedDisconnect: da.ForcedDisconnect, } if da.SessionSConns != nil { - cln.SessionSConns = utils.CloneStringSlice(da.SessionSConns) + cln.SessionSConns = slices.Clone(da.SessionSConns) } if da.RequestProcessors != nil { cln.RequestProcessors = make([]*RequestProcessor, len(da.RequestProcessors)) @@ -198,7 +200,7 @@ func diffDiameterAgentJsonCfg(d *DiameterAgentJsonCfg, v1, v2 *DiameterAgentCfg, if v1.DictionariesPath != v2.DictionariesPath { d.Dictionaries_path = utils.StringPointer(v2.DictionariesPath) } - if !utils.SliceStringEqual(v1.SessionSConns, v2.SessionSConns) { + if !slices.Equal(v1.SessionSConns, v2.SessionSConns) { d.Sessions_conns = utils.SliceStringPointer(getBiRPCInternalJSONConns(v2.SessionSConns)) } if v1.OriginHost != v2.OriginHost { diff --git a/config/dispatcherscfg.go b/config/dispatcherscfg.go index 1ddef72fd..6dea976a4 100644 --- a/config/dispatcherscfg.go +++ b/config/dispatcherscfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "slices" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -74,19 +76,19 @@ func (dps *DispatcherSCfg) loadFromJSONCfg(jsnCfg *DispatcherSJsonCfg) (err erro dps.IndexedSelects = *jsnCfg.Indexed_selects } if jsnCfg.String_indexed_fields != nil { - dps.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.String_indexed_fields)) + dps.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.String_indexed_fields)) } if jsnCfg.Prefix_indexed_fields != nil { - dps.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Prefix_indexed_fields)) + dps.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Prefix_indexed_fields)) } if jsnCfg.Suffix_indexed_fields != nil { - dps.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Suffix_indexed_fields)) + dps.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Suffix_indexed_fields)) } if jsnCfg.Exists_indexed_fields != nil { - dps.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Exists_indexed_fields)) + dps.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Exists_indexed_fields)) } if jsnCfg.Notexists_indexed_fields != nil { - dps.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Notexists_indexed_fields)) + dps.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Notexists_indexed_fields)) } if jsnCfg.Attributes_conns != nil { dps.AttributeSConns = updateInternalConnsWithPrfx(*jsnCfg.Attributes_conns, utils.MetaAttributes, utils.MetaDispatchers) @@ -112,22 +114,22 @@ func (dps DispatcherSCfg) AsMapInterface(string) any { utils.OptsCfg: opts, } if dps.StringIndexedFields != nil { - mp[utils.StringIndexedFieldsCfg] = utils.CloneStringSlice(*dps.StringIndexedFields) + mp[utils.StringIndexedFieldsCfg] = slices.Clone(*dps.StringIndexedFields) } if dps.PrefixIndexedFields != nil { - mp[utils.PrefixIndexedFieldsCfg] = utils.CloneStringSlice(*dps.PrefixIndexedFields) + mp[utils.PrefixIndexedFieldsCfg] = slices.Clone(*dps.PrefixIndexedFields) } if dps.SuffixIndexedFields != nil { - mp[utils.SuffixIndexedFieldsCfg] = utils.CloneStringSlice(*dps.SuffixIndexedFields) + mp[utils.SuffixIndexedFieldsCfg] = slices.Clone(*dps.SuffixIndexedFields) } if dps.AttributeSConns != nil { mp[utils.AttributeSConnsCfg] = getInternalJSONConnsWithPrfx(dps.AttributeSConns, utils.MetaDispatchers) } if dps.ExistsIndexedFields != nil { - mp[utils.ExistsIndexedFieldsCfg] = utils.CloneStringSlice(*dps.ExistsIndexedFields) + mp[utils.ExistsIndexedFieldsCfg] = slices.Clone(*dps.ExistsIndexedFields) } if dps.NotExistsIndexedFields != nil { - mp[utils.NotExistsIndexedFieldsCfg] = utils.CloneStringSlice(*dps.NotExistsIndexedFields) + mp[utils.NotExistsIndexedFieldsCfg] = slices.Clone(*dps.NotExistsIndexedFields) } return mp } @@ -155,22 +157,22 @@ func (dps DispatcherSCfg) Clone() (cln *DispatcherSCfg) { } if dps.AttributeSConns != nil { - cln.AttributeSConns = utils.CloneStringSlice(dps.AttributeSConns) + cln.AttributeSConns = slices.Clone(dps.AttributeSConns) } if dps.StringIndexedFields != nil { - cln.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*dps.StringIndexedFields)) + cln.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*dps.StringIndexedFields)) } if dps.PrefixIndexedFields != nil { - cln.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*dps.PrefixIndexedFields)) + cln.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*dps.PrefixIndexedFields)) } if dps.SuffixIndexedFields != nil { - cln.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*dps.SuffixIndexedFields)) + cln.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*dps.SuffixIndexedFields)) } if dps.ExistsIndexedFields != nil { - cln.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*dps.ExistsIndexedFields)) + cln.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*dps.ExistsIndexedFields)) } if dps.NotExistsIndexedFields != nil { - cln.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*dps.NotExistsIndexedFields)) + cln.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*dps.NotExistsIndexedFields)) } return } @@ -220,7 +222,7 @@ func diffDispatcherSJsonCfg(d *DispatcherSJsonCfg, v1, v2 *DispatcherSCfg) *Disp if v1.NestedFields != v2.NestedFields { d.Nested_fields = utils.BoolPointer(v2.NestedFields) } - if !utils.SliceStringEqual(v1.AttributeSConns, v2.AttributeSConns) { + if !slices.Equal(v1.AttributeSConns, v2.AttributeSConns) { d.Attributes_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AttributeSConns)) } d.Opts = diffDispatchersOptsJsonCfg(d.Opts, v1.Opts, v2.Opts) diff --git a/config/dnsagntcfg.go b/config/dnsagntcfg.go index e235d0ba2..b8515f46c 100644 --- a/config/dnsagntcfg.go +++ b/config/dnsagntcfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "slices" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -124,7 +126,7 @@ func (da DNSAgentCfg) Clone() (cln *DNSAgentCfg) { copy(cln.Listeners, da.Listeners) } if da.SessionSConns != nil { - cln.SessionSConns = utils.CloneStringSlice(da.SessionSConns) + cln.SessionSConns = slices.Clone(da.SessionSConns) } if da.RequestProcessors != nil { cln.RequestProcessors = make([]*RequestProcessor, len(da.RequestProcessors)) @@ -194,7 +196,7 @@ func diffDNSAgentJsonCfg(d *DNSAgentJsonCfg, v1, v2 *DNSAgentCfg, separator stri d.Listeners = diffListeners - if !utils.SliceStringEqual(v1.SessionSConns, v2.SessionSConns) { + if !slices.Equal(v1.SessionSConns, v2.SessionSConns) { d.Sessions_conns = utils.SliceStringPointer(getBiRPCInternalJSONConns(v2.SessionSConns)) } if v1.Timezone != v2.Timezone { diff --git a/config/eescfg.go b/config/eescfg.go index 507991804..47443115f 100644 --- a/config/eescfg.go +++ b/config/eescfg.go @@ -20,6 +20,7 @@ package config import ( "reflect" + "slices" "time" "github.com/cgrates/birpc/context" @@ -109,7 +110,7 @@ func (eeS EEsCfg) Clone() (cln *EEsCfg) { Exporters: make([]*EventExporterCfg, len(eeS.Exporters)), } if eeS.AttributeSConns != nil { - cln.AttributeSConns = utils.CloneStringSlice(eeS.AttributeSConns) + cln.AttributeSConns = slices.Clone(eeS.AttributeSConns) } for key, value := range eeS.Cache { cln.Cache[key] = value.Clone() @@ -509,7 +510,7 @@ func (eeC *EventExporterCfg) loadFromJSONCfg(jsnEec *EventExporterJsonCfg, msgTe eeC.Timezone = *jsnEec.Timezone } if jsnEec.Filters != nil { - eeC.Filters = utils.CloneStringSlice(*jsnEec.Filters) + eeC.Filters = slices.Clone(*jsnEec.Filters) } if jsnEec.Flags != nil { eeC.Flags = utils.FlagsWithParamsFromSlice(*jsnEec.Flags) @@ -518,7 +519,7 @@ func (eeC *EventExporterCfg) loadFromJSONCfg(jsnEec *EventExporterJsonCfg, msgTe eeC.AttributeSCtx = *jsnEec.Attribute_context } if jsnEec.Attribute_ids != nil { - eeC.AttributeSIDs = utils.CloneStringSlice(*jsnEec.Attribute_ids) + eeC.AttributeSIDs = slices.Clone(*jsnEec.Attribute_ids) } if jsnEec.Synchronous != nil { eeC.Synchronous = *jsnEec.Synchronous @@ -827,13 +828,13 @@ func (eeC EventExporterCfg) Clone() (cln *EventExporterCfg) { } if eeC.Filters != nil { - cln.Filters = utils.CloneStringSlice(eeC.Filters) + cln.Filters = slices.Clone(eeC.Filters) } if eeC.AttributeSIDs != nil { - cln.AttributeSIDs = utils.CloneStringSlice(eeC.AttributeSIDs) + cln.AttributeSIDs = slices.Clone(eeC.AttributeSIDs) } if eeC.EFsConns != nil { - cln.EFsConns = utils.CloneStringSlice(eeC.EFsConns) + cln.EFsConns = slices.Clone(eeC.EFsConns) } for idx, fld := range eeC.Fields { cln.Fields[idx] = fld.Clone() @@ -1586,15 +1587,15 @@ func diffEventExporterJsonCfg(d *EventExporterJsonCfg, v1, v2 *EventExporterCfg, if v1.Timezone != v2.Timezone { d.Timezone = utils.StringPointer(v2.Timezone) } - if !utils.SliceStringEqual(v1.Filters, v2.Filters) { + if !slices.Equal(v1.Filters, v2.Filters) { d.Filters = &v2.Filters } flgs1 := v1.Flags.SliceFlags() flgs2 := v2.Flags.SliceFlags() - if !utils.SliceStringEqual(flgs1, flgs2) { + if !slices.Equal(flgs1, flgs2) { d.Flags = &flgs2 } - if !utils.SliceStringEqual(v1.AttributeSIDs, v2.AttributeSIDs) { + if !slices.Equal(v1.AttributeSIDs, v2.AttributeSIDs) { d.Attribute_ids = &v2.AttributeSIDs } if v1.AttributeSCtx != v2.AttributeSCtx { @@ -1623,7 +1624,7 @@ func diffEventExporterJsonCfg(d *EventExporterJsonCfg, v1, v2 *EventExporterCfg, if v1.FailedPostsDir != v2.FailedPostsDir { d.Failed_posts_dir = utils.StringPointer(v2.FailedPostsDir) } - if !utils.SliceStringEqual(v1.EFsConns, v2.EFsConns) { + if !slices.Equal(v1.EFsConns, v2.EFsConns) { d.Efs_conns = &v2.EFsConns } return d @@ -1681,7 +1682,7 @@ func diffEEsJsonCfg(d *EEsJsonCfg, v1, v2 *EEsCfg, separator string) *EEsJsonCfg if v1.Enabled != v2.Enabled { d.Enabled = utils.BoolPointer(v2.Enabled) } - if !utils.SliceStringEqual(v1.AttributeSConns, v2.AttributeSConns) { + if !slices.Equal(v1.AttributeSConns, v2.AttributeSConns) { d.Attributes_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AttributeSConns)) } d.Cache = diffCacheParamsJsonCfg(d.Cache, v2.Cache) diff --git a/config/erscfg.go b/config/erscfg.go index 327ef9c0d..bc59e7fc7 100644 --- a/config/erscfg.go +++ b/config/erscfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -97,7 +98,7 @@ func (erS ERsCfg) Clone() (cln *ERsCfg) { PartialCacheTTL: erS.PartialCacheTTL, } if erS.SessionSConns != nil { - cln.SessionSConns = utils.CloneStringSlice(erS.SessionSConns) + cln.SessionSConns = slices.Clone(erS.SessionSConns) } for idx, rdr := range erS.Readers { cln.Readers[idx] = rdr.Clone() @@ -480,7 +481,7 @@ func (er *EventReaderCfg) loadFromJSONCfg(jsnCfg *EventReaderJsonCfg, msgTemplat er.Timezone = *jsnCfg.Timezone } if jsnCfg.Filters != nil { - er.Filters = utils.CloneStringSlice(*jsnCfg.Filters) + er.Filters = slices.Clone(*jsnCfg.Filters) } if jsnCfg.Flags != nil { er.Flags = utils.FlagsWithParamsFromSlice(*jsnCfg.Flags) @@ -821,7 +822,7 @@ func (er EventReaderCfg) Clone() (cln *EventReaderCfg) { Opts: er.Opts.Clone(), } if er.Filters != nil { - cln.Filters = utils.CloneStringSlice(er.Filters) + cln.Filters = slices.Clone(er.Filters) } if er.Fields != nil { cln.Fields = make([]*FCTemplate, len(er.Fields)) @@ -1796,12 +1797,12 @@ func diffEventReaderJsonCfg(d *EventReaderJsonCfg, v1, v2 *EventReaderCfg, separ if v1.Timezone != v2.Timezone { d.Timezone = utils.StringPointer(v2.Timezone) } - if !utils.SliceStringEqual(v1.Filters, v2.Filters) { + if !slices.Equal(v1.Filters, v2.Filters) { d.Filters = &v2.Filters } flgs1 := v1.Flags.SliceFlags() flgs2 := v2.Flags.SliceFlags() - if !utils.SliceStringEqual(flgs1, flgs2) { + if !slices.Equal(flgs1, flgs2) { d.Flags = &flgs2 } var flds []*FcTemplateJsonCfg @@ -1886,7 +1887,7 @@ func diffERsJsonCfg(d *ERsJsonCfg, v1, v2 *ERsCfg, separator string) *ERsJsonCfg if v1.Enabled != v2.Enabled { d.Enabled = utils.BoolPointer(v2.Enabled) } - if !utils.SliceStringEqual(v1.SessionSConns, v2.SessionSConns) { + if !slices.Equal(v1.SessionSConns, v2.SessionSConns) { d.Sessions_conns = utils.SliceStringPointer(getInternalJSONConns(v2.SessionSConns)) } if v1.PartialCacheTTL != v2.PartialCacheTTL { diff --git a/config/fctemplate.go b/config/fctemplate.go index ffea2e328..dd4a5d8f4 100644 --- a/config/fctemplate.go +++ b/config/fctemplate.go @@ -20,6 +20,7 @@ package config import ( "fmt" + "slices" "time" "github.com/cgrates/birpc/context" @@ -42,7 +43,7 @@ func NewFCTemplateFromFCTemplateJSONCfg(jsnCfg *FcTemplateJsonCfg, separator str fcTmp.Tag = *jsnCfg.Tag } if jsnCfg.Filters != nil { - fcTmp.Filters = utils.CloneStringSlice(*jsnCfg.Filters) + fcTmp.Filters = slices.Clone(*jsnCfg.Filters) } if jsnCfg.Value != nil { if fcTmp.Value, err = NewRSRParsers(*jsnCfg.Value, separator); err != nil { @@ -183,10 +184,10 @@ func (fc FCTemplate) Clone() (cln *FCTemplate) { cln.RoundingDecimals = utils.IntPointer(*fc.RoundingDecimals) } if fc.pathSlice != nil { - cln.pathSlice = utils.CloneStringSlice(fc.pathSlice) + cln.pathSlice = slices.Clone(fc.pathSlice) } if fc.Filters != nil { - cln.Filters = utils.CloneStringSlice(fc.Filters) + cln.Filters = slices.Clone(fc.Filters) } return } @@ -312,8 +313,8 @@ func (fc *FCTemplate) Equals(fc2 *FCTemplate) bool { fc.Tag == fc2.Tag && fc.Type == fc2.Type && fc.Path == fc2.Path && - utils.SliceStringEqual(fc.Filters, fc2.Filters) && - utils.SliceStringEqual(fc.Value.AsStringSlice(), fc2.Value.AsStringSlice()) && + slices.Equal(fc.Filters, fc2.Filters) && + slices.Equal(fc.Value.AsStringSlice(), fc2.Value.AsStringSlice()) && fc.Width == fc2.Width && fc.Strip == fc2.Strip && fc.Padding == fc2.Padding && diff --git a/config/filterscfg.go b/config/filterscfg.go index fdbefcdb6..6066d4987 100644 --- a/config/filterscfg.go +++ b/config/filterscfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "slices" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -77,13 +79,13 @@ func (fSCfg FilterSCfg) CloneSection() Section { return fSCfg.Clone() } func (fSCfg FilterSCfg) Clone() (cln *FilterSCfg) { cln = new(FilterSCfg) if fSCfg.StatSConns != nil { - cln.StatSConns = utils.CloneStringSlice(fSCfg.StatSConns) + cln.StatSConns = slices.Clone(fSCfg.StatSConns) } if fSCfg.ResourceSConns != nil { - cln.ResourceSConns = utils.CloneStringSlice(fSCfg.ResourceSConns) + cln.ResourceSConns = slices.Clone(fSCfg.ResourceSConns) } if fSCfg.AccountSConns != nil { - cln.AccountSConns = utils.CloneStringSlice(fSCfg.AccountSConns) + cln.AccountSConns = slices.Clone(fSCfg.AccountSConns) } return } @@ -99,13 +101,13 @@ func diffFilterSJsonCfg(d *FilterSJsonCfg, v1, v2 *FilterSCfg) *FilterSJsonCfg { if d == nil { d = new(FilterSJsonCfg) } - if !utils.SliceStringEqual(v1.StatSConns, v2.StatSConns) { + if !slices.Equal(v1.StatSConns, v2.StatSConns) { d.Stats_conns = utils.SliceStringPointer(getInternalJSONConns(v2.StatSConns)) } - if !utils.SliceStringEqual(v1.ResourceSConns, v2.ResourceSConns) { + if !slices.Equal(v1.ResourceSConns, v2.ResourceSConns) { d.Resources_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ResourceSConns)) } - if !utils.SliceStringEqual(v1.AccountSConns, v2.AccountSConns) { + if !slices.Equal(v1.AccountSConns, v2.AccountSConns) { d.Accounts_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AccountSConns)) } return d diff --git a/config/fsagentcfg.go b/config/fsagentcfg.go index 2868663dc..06801bbaf 100644 --- a/config/fsagentcfg.go +++ b/config/fsagentcfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -197,7 +198,7 @@ func (fscfg FsAgentCfg) Clone() (cln *FsAgentCfg) { EmptyBalanceContext: fscfg.EmptyBalanceContext, EmptyBalanceAnnFile: fscfg.EmptyBalanceAnnFile, MaxWaitConnection: fscfg.MaxWaitConnection, - SessionSConns: utils.CloneStringSlice(fscfg.SessionSConns), + SessionSConns: slices.Clone(fscfg.SessionSConns), } if fscfg.EventSocketConns != nil { cln.EventSocketConns = make([]*FsConnCfg, len(fscfg.EventSocketConns)) @@ -274,7 +275,7 @@ func diffFreeswitchAgentJsonCfg(d *FreeswitchAgentJsonCfg, v1, v2 *FsAgentCfg) * if v1.Enabled != v2.Enabled { d.Enabled = utils.BoolPointer(v2.Enabled) } - if !utils.SliceStringEqual(v1.SessionSConns, v2.SessionSConns) { + if !slices.Equal(v1.SessionSConns, v2.SessionSConns) { d.Sessions_conns = utils.SliceStringPointer(getBiRPCInternalJSONConns(v2.SessionSConns)) } if v1.SubscribePark != v2.SubscribePark { @@ -285,7 +286,7 @@ func diffFreeswitchAgentJsonCfg(d *FreeswitchAgentJsonCfg, v1, v2 *FsAgentCfg) * } extra1 := v1.ExtraFields.AsStringSlice() extra2 := v2.ExtraFields.AsStringSlice() - if !utils.SliceStringEqual(extra1, extra2) { + if !slices.Equal(extra1, extra2) { d.Extra_fields = &extra2 } if v1.LowBalanceAnnFile != v2.LowBalanceAnnFile { diff --git a/config/httpagntcfg.go b/config/httpagntcfg.go index df1e678f5..b9bf4017f 100644 --- a/config/httpagntcfg.go +++ b/config/httpagntcfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "slices" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" "github.com/cgrates/rpcclient" @@ -198,7 +200,7 @@ func diffHttpAgentJsonCfg(d *HttpAgentJsonCfg, v1, v2 *HTTPAgentCfg, separator s if v1.ReplyPayload != v2.ReplyPayload { d.Reply_payload = utils.StringPointer(v2.ReplyPayload) } - if !utils.SliceStringEqual(v1.SessionSConns, v2.SessionSConns) { + if !slices.Equal(v1.SessionSConns, v2.SessionSConns) { d.Sessions_conns = utils.SliceStringPointer(getBiRPCInternalJSONConns(v2.SessionSConns)) } @@ -213,7 +215,7 @@ func equalsHTTPAgentCfgs(v1, v2 HTTPAgentCfgs) bool { for i := range v2 { if v1[i].ID != v2[i].ID || v1[i].URL != v2[i].URL || - !utils.SliceStringEqual(v1[i].SessionSConns, v2[i].SessionSConns) || + !slices.Equal(v1[i].SessionSConns, v2[i].SessionSConns) || v1[i].RequestPayload != v2[i].RequestPayload || v1[i].ReplyPayload != v2[i].ReplyPayload || !equalsRequestProcessors(v1[i].RequestProcessors, v2[i].RequestProcessors) { diff --git a/config/kamagentcfg.go b/config/kamagentcfg.go index fbc0dfc64..9fe78789f 100644 --- a/config/kamagentcfg.go +++ b/config/kamagentcfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -149,7 +150,7 @@ func (ka KamAgentCfg) Clone() (cln *KamAgentCfg) { Timezone: ka.Timezone, } if ka.SessionSConns != nil { - cln.SessionSConns = utils.CloneStringSlice(ka.SessionSConns) + cln.SessionSConns = slices.Clone(ka.SessionSConns) } if ka.EvapiConns != nil { cln.EvapiConns = make([]*KamConnCfg, len(ka.EvapiConns)) @@ -216,7 +217,7 @@ func diffKamAgentJsonCfg(d *KamAgentJsonCfg, v1, v2 *KamAgentCfg) *KamAgentJsonC if v1.Enabled != v2.Enabled { d.Enabled = utils.BoolPointer(v2.Enabled) } - if !utils.SliceStringEqual(v1.SessionSConns, v2.SessionSConns) { + if !slices.Equal(v1.SessionSConns, v2.SessionSConns) { d.Sessions_conns = utils.SliceStringPointer(getBiRPCInternalJSONConns(v2.SessionSConns)) } if v1.CreateCdr != v2.CreateCdr { diff --git a/config/loadercgrcfg.go b/config/loadercgrcfg.go index 79ecfbd7d..a3120ce9d 100644 --- a/config/loadercgrcfg.go +++ b/config/loadercgrcfg.go @@ -20,6 +20,7 @@ package config import ( "encoding/json" + "slices" "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" @@ -116,10 +117,10 @@ func (ld LoaderCgrCfg) Clone() (cln *LoaderCgrCfg) { } if ld.CachesConns != nil { - cln.CachesConns = utils.CloneStringSlice(ld.CachesConns) + cln.CachesConns = slices.Clone(ld.CachesConns) } if ld.ActionSConns != nil { - cln.ActionSConns = utils.CloneStringSlice(ld.ActionSConns) + cln.ActionSConns = slices.Clone(ld.ActionSConns) } return } @@ -151,10 +152,10 @@ func diffLoaderCfgJson(d *LoaderCfgJson, v1, v2 *LoaderCgrCfg) *LoaderCfgJson { if v1.FieldSeparator != v2.FieldSeparator { d.Field_separator = utils.StringPointer(string(v2.FieldSeparator)) } - if !utils.SliceStringEqual(v1.CachesConns, v2.CachesConns) { + if !slices.Equal(v1.CachesConns, v2.CachesConns) { d.Caches_conns = utils.SliceStringPointer(getInternalJSONConns(v2.CachesConns)) } - if !utils.SliceStringEqual(v1.ActionSConns, v2.ActionSConns) { + if !slices.Equal(v1.ActionSConns, v2.ActionSConns) { d.Actions_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ActionSConns)) } gc1 := string(v1.GapiCredentials) diff --git a/config/loaderscfg.go b/config/loaderscfg.go index fee073188..30b895fab 100644 --- a/config/loaderscfg.go +++ b/config/loaderscfg.go @@ -22,6 +22,7 @@ import ( "os" "path" "path/filepath" + "slices" "time" "github.com/cgrates/birpc/context" @@ -283,7 +284,7 @@ func (l LoaderSCfg) Clone() (cln *LoaderSCfg) { Tenant: l.Tenant, RunDelay: l.RunDelay, LockFilePath: l.LockFilePath, - CacheSConns: utils.CloneStringSlice(l.CacheSConns), + CacheSConns: slices.Clone(l.CacheSConns), FieldSeparator: l.FieldSeparator, TpInDir: l.TpInDir, TpOutDir: l.TpOutDir, @@ -399,7 +400,7 @@ func equalsLoaderDatasType(v1, v2 []*LoaderDataType) bool { if v1[i].ID != v2[i].ID || v1[i].Type != v2[i].Type || v1[i].Filename != v2[i].Filename || - !utils.SliceStringEqual(v1[i].Flags.SliceFlags(), v2[i].Flags.SliceFlags()) || + !slices.Equal(v1[i].Flags.SliceFlags(), v2[i].Flags.SliceFlags()) || !fcTemplatesEqual(v1[i].Fields, v2[i].Fields) { return false } @@ -440,7 +441,7 @@ func diffLoaderJsonCfg(v1, v2 *LoaderSCfg, separator string) (d *LoaderJsonCfg) if v1.LockFilePath != v2.LockFilePath { d.Lockfile_path = utils.StringPointer(v2.LockFilePath) } - if !utils.SliceStringEqual(v1.CacheSConns, v2.CacheSConns) { + if !slices.Equal(v1.CacheSConns, v2.CacheSConns) { d.Caches_conns = utils.SliceStringPointer(getInternalJSONConns(v2.CacheSConns)) } if v1.FieldSeparator != v2.FieldSeparator { @@ -485,7 +486,7 @@ func equalsLoadersJsonCfg(v1, v2 LoaderSCfgs) bool { v1[i].Tenant != v2[i].Tenant || v1[i].RunDelay != v2[i].RunDelay || v1[i].LockFilePath != v2[i].LockFilePath || - !utils.SliceStringEqual(v1[i].CacheSConns, v2[i].CacheSConns) || + !slices.Equal(v1[i].CacheSConns, v2[i].CacheSConns) || v1[i].FieldSeparator != v2[i].FieldSeparator || v1[i].TpInDir != v2[i].TpInDir || v1[i].TpOutDir != v2[i].TpOutDir || diff --git a/config/loggercfg.go b/config/loggercfg.go index 2b202eb3c..98d83baca 100644 --- a/config/loggercfg.go +++ b/config/loggercfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "slices" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -161,7 +163,7 @@ func diffLoggerJsonCfg(d *LoggerJsonCfg, v1, v2 *LoggerCfg) *LoggerJsonCfg { if v1.Level != v2.Level { d.Level = utils.IntPointer(v2.Level) } - if !utils.SliceStringEqual(v1.EFsConns, v2.EFsConns) { + if !slices.Equal(v1.EFsConns, v2.EFsConns) { d.Efs_conns = utils.SliceStringPointer(getInternalJSONConns(v2.EFsConns)) } d.Opts = diffLoggerOptsJsonCfg(d.Opts, v1.Opts, v2.Opts) diff --git a/config/migratorcfg.go b/config/migratorcfg.go index bddcf0709..3ea378554 100644 --- a/config/migratorcfg.go +++ b/config/migratorcfg.go @@ -20,6 +20,7 @@ package config import ( "fmt" + "slices" "strings" "github.com/cgrates/birpc/context" @@ -79,7 +80,7 @@ func (mg *MigratorCgrCfg) loadFromJSONCfg(jsnCfg *MigratorCfgJson) (err error) { mg.OutDataDBEncoding = strings.TrimPrefix(*jsnCfg.Out_dataDB_encoding, "*") } if jsnCfg.Users_filters != nil && len(*jsnCfg.Users_filters) != 0 { - mg.UsersFilters = utils.CloneStringSlice(*jsnCfg.Users_filters) + mg.UsersFilters = slices.Clone(*jsnCfg.Users_filters) } if jsnCfg.Out_dataDB_opts != nil { err = mg.OutDataDBOpts.loadFromJSONCfg(jsnCfg.Out_dataDB_opts) @@ -114,7 +115,7 @@ func (mg MigratorCgrCfg) AsMapInterface(string) any { utils.OutDataDBPasswordCfg: mg.OutDataDBPassword, utils.OutDataDBEncodingCfg: mg.OutDataDBEncoding, utils.OutDataDBOptsCfg: outDataDBOpts, - utils.UsersFiltersCfg: utils.CloneStringSlice(mg.UsersFilters), + utils.UsersFiltersCfg: slices.Clone(mg.UsersFilters), } } @@ -135,7 +136,7 @@ func (mg MigratorCgrCfg) Clone() (cln *MigratorCgrCfg) { OutDataDBOpts: mg.OutDataDBOpts.Clone(), } if mg.UsersFilters != nil { - cln.UsersFilters = utils.CloneStringSlice(mg.UsersFilters) + cln.UsersFilters = slices.Clone(mg.UsersFilters) } return } @@ -178,8 +179,8 @@ func diffMigratorCfgJson(d *MigratorCfgJson, v1, v2 *MigratorCgrCfg) *MigratorCf d.Out_dataDB_encoding = utils.StringPointer(v2.OutDataDBEncoding) } - if !utils.SliceStringEqual(v1.UsersFilters, v2.UsersFilters) { - d.Users_filters = utils.SliceStringPointer(utils.CloneStringSlice(v2.UsersFilters)) + if !slices.Equal(v1.UsersFilters, v2.UsersFilters) { + d.Users_filters = utils.SliceStringPointer(slices.Clone(v2.UsersFilters)) } d.Out_dataDB_opts = diffDataDBOptsJsonCfg(d.Out_dataDB_opts, v1.OutDataDBOpts, v2.OutDataDBOpts) return d diff --git a/config/radiuscfg.go b/config/radiuscfg.go index 334b45fed..8172f888f 100644 --- a/config/radiuscfg.go +++ b/config/radiuscfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "slices" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -122,7 +124,7 @@ func (ra RadiusAgentCfg) Clone() (cln *RadiusAgentCfg) { ClientDictionaries: make(map[string]string), } if ra.SessionSConns != nil { - cln.SessionSConns = utils.CloneStringSlice(ra.SessionSConns) + cln.SessionSConns = slices.Clone(ra.SessionSConns) } for k, v := range ra.ClientSecrets { cln.ClientSecrets[k] = v @@ -169,7 +171,7 @@ func diffRadiusAgentJsonCfg(d *RadiusAgentJsonCfg, v1, v2 *RadiusAgentCfg, separ } d.Client_secrets = diffMapString(d.Client_secrets, v1.ClientSecrets, v2.ClientSecrets) d.Client_dictionaries = diffMapString(d.Client_dictionaries, v1.ClientDictionaries, v2.ClientDictionaries) - if !utils.SliceStringEqual(v1.SessionSConns, v2.SessionSConns) { + if !slices.Equal(v1.SessionSConns, v2.SessionSConns) { d.Sessions_conns = utils.SliceStringPointer(getBiRPCInternalJSONConns(v2.SessionSConns)) } d.Request_processors = diffReqProcessorsJsnCfg(d.Request_processors, v1.RequestProcessors, v2.RequestProcessors, separator) diff --git a/config/ratescfg.go b/config/ratescfg.go index dbd8ee3e7..6651c21ee 100644 --- a/config/ratescfg.go +++ b/config/ratescfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -116,19 +117,19 @@ func (rCfg *RateSCfg) loadFromJSONCfg(jsnCfg *RateSJsonCfg) (err error) { rCfg.IndexedSelects = *jsnCfg.Indexed_selects } if jsnCfg.String_indexed_fields != nil { - rCfg.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.String_indexed_fields)) + rCfg.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.String_indexed_fields)) } if jsnCfg.Prefix_indexed_fields != nil { - rCfg.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Prefix_indexed_fields)) + rCfg.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Prefix_indexed_fields)) } if jsnCfg.Suffix_indexed_fields != nil { - rCfg.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Suffix_indexed_fields)) + rCfg.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Suffix_indexed_fields)) } if jsnCfg.Exists_indexed_fields != nil { - rCfg.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Exists_indexed_fields)) + rCfg.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Exists_indexed_fields)) } if jsnCfg.Notexists_indexed_fields != nil { - rCfg.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Notexists_indexed_fields)) + rCfg.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Notexists_indexed_fields)) } if jsnCfg.Nested_fields != nil { rCfg.NestedFields = *jsnCfg.Nested_fields @@ -138,19 +139,19 @@ func (rCfg *RateSCfg) loadFromJSONCfg(jsnCfg *RateSJsonCfg) (err error) { rCfg.RateIndexedSelects = *jsnCfg.Rate_indexed_selects } if jsnCfg.Rate_string_indexed_fields != nil { - rCfg.RateStringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Rate_string_indexed_fields)) + rCfg.RateStringIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Rate_string_indexed_fields)) } if jsnCfg.Rate_prefix_indexed_fields != nil { - rCfg.RatePrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Rate_prefix_indexed_fields)) + rCfg.RatePrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Rate_prefix_indexed_fields)) } if jsnCfg.Rate_suffix_indexed_fields != nil { - rCfg.RateSuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Rate_suffix_indexed_fields)) + rCfg.RateSuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Rate_suffix_indexed_fields)) } if jsnCfg.Rate_exists_indexed_fields != nil { - rCfg.RateExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Rate_exists_indexed_fields)) + rCfg.RateExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Rate_exists_indexed_fields)) } if jsnCfg.Rate_notexists_indexed_fields != nil { - rCfg.RateNotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Rate_notexists_indexed_fields)) + rCfg.RateNotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Rate_notexists_indexed_fields)) } if jsnCfg.Rate_nested_fields != nil { rCfg.RateNestedFields = *jsnCfg.Rate_nested_fields @@ -183,34 +184,34 @@ func (rCfg RateSCfg) AsMapInterface(string) any { utils.OptsCfg: opts, } if rCfg.StringIndexedFields != nil { - mp[utils.StringIndexedFieldsCfg] = utils.CloneStringSlice(*rCfg.StringIndexedFields) + mp[utils.StringIndexedFieldsCfg] = slices.Clone(*rCfg.StringIndexedFields) } if rCfg.PrefixIndexedFields != nil { - mp[utils.PrefixIndexedFieldsCfg] = utils.CloneStringSlice(*rCfg.PrefixIndexedFields) + mp[utils.PrefixIndexedFieldsCfg] = slices.Clone(*rCfg.PrefixIndexedFields) } if rCfg.SuffixIndexedFields != nil { - mp[utils.SuffixIndexedFieldsCfg] = utils.CloneStringSlice(*rCfg.SuffixIndexedFields) + mp[utils.SuffixIndexedFieldsCfg] = slices.Clone(*rCfg.SuffixIndexedFields) } if rCfg.ExistsIndexedFields != nil { - mp[utils.ExistsIndexedFieldsCfg] = utils.CloneStringSlice(*rCfg.ExistsIndexedFields) + mp[utils.ExistsIndexedFieldsCfg] = slices.Clone(*rCfg.ExistsIndexedFields) } if rCfg.NotExistsIndexedFields != nil { - mp[utils.NotExistsIndexedFieldsCfg] = utils.CloneStringSlice(*rCfg.NotExistsIndexedFields) + mp[utils.NotExistsIndexedFieldsCfg] = slices.Clone(*rCfg.NotExistsIndexedFields) } if rCfg.RateStringIndexedFields != nil { - mp[utils.RateStringIndexedFieldsCfg] = utils.CloneStringSlice(*rCfg.RateStringIndexedFields) + mp[utils.RateStringIndexedFieldsCfg] = slices.Clone(*rCfg.RateStringIndexedFields) } if rCfg.RatePrefixIndexedFields != nil { - mp[utils.RatePrefixIndexedFieldsCfg] = utils.CloneStringSlice(*rCfg.RatePrefixIndexedFields) + mp[utils.RatePrefixIndexedFieldsCfg] = slices.Clone(*rCfg.RatePrefixIndexedFields) } if rCfg.RateSuffixIndexedFields != nil { - mp[utils.RateSuffixIndexedFieldsCfg] = utils.CloneStringSlice(*rCfg.RateSuffixIndexedFields) + mp[utils.RateSuffixIndexedFieldsCfg] = slices.Clone(*rCfg.RateSuffixIndexedFields) } if rCfg.RateExistsIndexedFields != nil { - mp[utils.RateExistsIndexedFieldsCfg] = utils.CloneStringSlice(*rCfg.RateExistsIndexedFields) + mp[utils.RateExistsIndexedFieldsCfg] = slices.Clone(*rCfg.RateExistsIndexedFields) } if rCfg.RateNotExistsIndexedFields != nil { - mp[utils.RateNotExistsIndexedFieldsCfg] = utils.CloneStringSlice(*rCfg.RateNotExistsIndexedFields) + mp[utils.RateNotExistsIndexedFieldsCfg] = slices.Clone(*rCfg.RateNotExistsIndexedFields) } return mp } @@ -260,34 +261,34 @@ func (rCfg RateSCfg) Clone() (cln *RateSCfg) { Opts: rCfg.Opts.Clone(), } if rCfg.StringIndexedFields != nil { - cln.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rCfg.StringIndexedFields)) + cln.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*rCfg.StringIndexedFields)) } if rCfg.PrefixIndexedFields != nil { - cln.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rCfg.PrefixIndexedFields)) + cln.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*rCfg.PrefixIndexedFields)) } if rCfg.SuffixIndexedFields != nil { - cln.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rCfg.SuffixIndexedFields)) + cln.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*rCfg.SuffixIndexedFields)) } if rCfg.ExistsIndexedFields != nil { - cln.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rCfg.ExistsIndexedFields)) + cln.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*rCfg.ExistsIndexedFields)) } if rCfg.NotExistsIndexedFields != nil { - cln.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rCfg.NotExistsIndexedFields)) + cln.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*rCfg.NotExistsIndexedFields)) } if rCfg.RateStringIndexedFields != nil { - cln.RateStringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rCfg.RateStringIndexedFields)) + cln.RateStringIndexedFields = utils.SliceStringPointer(slices.Clone(*rCfg.RateStringIndexedFields)) } if rCfg.RatePrefixIndexedFields != nil { - cln.RatePrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rCfg.RatePrefixIndexedFields)) + cln.RatePrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*rCfg.RatePrefixIndexedFields)) } if rCfg.RateSuffixIndexedFields != nil { - cln.RateSuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rCfg.RateSuffixIndexedFields)) + cln.RateSuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*rCfg.RateSuffixIndexedFields)) } if rCfg.RateExistsIndexedFields != nil { - cln.RateExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rCfg.RateExistsIndexedFields)) + cln.RateExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*rCfg.RateExistsIndexedFields)) } if rCfg.RateNotExistsIndexedFields != nil { - cln.RateNotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rCfg.RateNotExistsIndexedFields)) + cln.RateNotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*rCfg.RateNotExistsIndexedFields)) } return } diff --git a/config/registrarccfg.go b/config/registrarccfg.go index 021aa3c36..e48f762e6 100644 --- a/config/registrarccfg.go +++ b/config/registrarccfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -86,7 +87,7 @@ func (dps *RegistrarCCfg) loadFromJSONCfg(jsnCfg *RegistrarCJsonCfg) (err error) return nil } if jsnCfg.Registrars_conns != nil { - dps.RegistrarSConns = utils.CloneStringSlice(*jsnCfg.Registrars_conns) + dps.RegistrarSConns = slices.Clone(*jsnCfg.Registrars_conns) } if jsnCfg.Hosts != nil { for _, hostJSON := range jsnCfg.Hosts { @@ -110,7 +111,7 @@ func (dps *RegistrarCCfg) loadFromJSONCfg(jsnCfg *RegistrarCJsonCfg) (err error) // AsMapInterface returns the config as a map[string]any func (dps *RegistrarCCfg) AsMapInterface() (initialMP map[string]any) { initialMP = map[string]any{ - utils.RegistrarsConnsCfg: utils.CloneStringSlice(dps.RegistrarSConns), + utils.RegistrarsConnsCfg: slices.Clone(dps.RegistrarSConns), utils.RefreshIntervalCfg: dps.RefreshInterval.String(), } if dps.RefreshInterval == 0 { @@ -138,7 +139,7 @@ func (dps RegistrarCCfg) Clone() (cln *RegistrarCCfg) { Hosts: make(map[string][]*RemoteHost), } if dps.RegistrarSConns != nil { - cln.RegistrarSConns = utils.CloneStringSlice(dps.RegistrarSConns) + cln.RegistrarSConns = slices.Clone(dps.RegistrarSConns) } for tnt, hosts := range dps.Hosts { clnH := make([]*RemoteHost, len(hosts)) @@ -160,8 +161,8 @@ func diffRegistrarCJsonCfg(d *RegistrarCJsonCfg, v1, v2 *RegistrarCCfg) *Registr if d == nil { d = new(RegistrarCJsonCfg) } - if !utils.SliceStringEqual(v1.RegistrarSConns, v2.RegistrarSConns) { - d.Registrars_conns = utils.SliceStringPointer(utils.CloneStringSlice(v2.RegistrarSConns)) + if !slices.Equal(v1.RegistrarSConns, v2.RegistrarSConns) { + d.Registrars_conns = utils.SliceStringPointer(slices.Clone(v2.RegistrarSConns)) } if d.Hosts == nil { d.Hosts = []*RemoteHostJsonWithTenant{} diff --git a/config/reqprocessorcfg.go b/config/reqprocessorcfg.go index 0114a5243..9ef75b7ac 100644 --- a/config/reqprocessorcfg.go +++ b/config/reqprocessorcfg.go @@ -18,7 +18,11 @@ along with this program. If not, see package config -import "github.com/cgrates/cgrates/utils" +import ( + "slices" + + "github.com/cgrates/cgrates/utils" +) // RequestProcessor is the request processor configuration type RequestProcessor struct { @@ -39,7 +43,7 @@ func (rp *RequestProcessor) loadFromJSONCfg(jsnCfg *ReqProcessorJsnCfg, sep stri rp.ID = *jsnCfg.ID } if jsnCfg.Filters != nil { - rp.Filters = utils.CloneStringSlice(*jsnCfg.Filters) + rp.Filters = slices.Clone(*jsnCfg.Filters) } if jsnCfg.Flags != nil { rp.Flags = utils.FlagsWithParamsFromSlice(*jsnCfg.Flags) @@ -69,7 +73,7 @@ func (rp *RequestProcessor) loadFromJSONCfg(jsnCfg *ReqProcessorJsnCfg, sep stri func (rp *RequestProcessor) AsMapInterface(separator string) (initialMP map[string]any) { initialMP = map[string]any{ utils.IDCfg: rp.ID, - utils.FiltersCfg: utils.CloneStringSlice(rp.Filters), + utils.FiltersCfg: slices.Clone(rp.Filters), utils.FlagsCfg: rp.Flags.SliceFlags(), utils.TimezoneCfg: rp.Timezone, } @@ -102,7 +106,7 @@ func (rp RequestProcessor) Clone() (cln *RequestProcessor) { Timezone: rp.Timezone, } if rp.Filters != nil { - cln.Filters = utils.CloneStringSlice(rp.Filters) + cln.Filters = slices.Clone(rp.Filters) } if rp.RequestFields != nil { cln.RequestFields = make([]*FCTemplate, len(rp.RequestFields)) @@ -141,12 +145,12 @@ func diffReqProcessorJsnCfg(d *ReqProcessorJsnCfg, v1, v2 *RequestProcessor, sep if tnt1 != tnt2 { d.Tenant = utils.StringPointer(tnt2) } - if !utils.SliceStringEqual(v1.Filters, v2.Filters) { - d.Filters = utils.SliceStringPointer(utils.CloneStringSlice(v2.Filters)) + if !slices.Equal(v1.Filters, v2.Filters) { + d.Filters = utils.SliceStringPointer(slices.Clone(v2.Filters)) } flag1 := v1.Flags.SliceFlags() flag2 := v2.Flags.SliceFlags() - if !utils.SliceStringEqual(flag1, flag2) { + if !slices.Equal(flag1, flag2) { d.Flags = utils.SliceStringPointer(flag2) } if v1.Timezone != v2.Timezone { @@ -236,9 +240,9 @@ func equalsRequestProcessors(v1, v2 []*RequestProcessor) bool { } for i := range v2 { if v1[i].ID != v2[i].ID || - !utils.SliceStringEqual(v1[i].Tenant.AsStringSlice(), v2[i].Tenant.AsStringSlice()) || - !utils.SliceStringEqual(v1[i].Filters, v2[i].Filters) || - !utils.SliceStringEqual(v1[i].Flags.SliceFlags(), v2[i].Flags.SliceFlags()) || + !slices.Equal(v1[i].Tenant.AsStringSlice(), v2[i].Tenant.AsStringSlice()) || + !slices.Equal(v1[i].Filters, v2[i].Filters) || + !slices.Equal(v1[i].Flags.SliceFlags(), v2[i].Flags.SliceFlags()) || v1[i].Timezone != v2[i].Timezone || !fcTemplatesEqual(v1[i].RequestFields, v2[i].RequestFields) || !fcTemplatesEqual(v1[i].ReplyFields, v2[i].ReplyFields) { diff --git a/config/resourcescfg.go b/config/resourcescfg.go index 27d8c247e..0dcaff086 100644 --- a/config/resourcescfg.go +++ b/config/resourcescfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -100,19 +101,19 @@ func (rlcfg *ResourceSConfig) loadFromJSONCfg(jsnCfg *ResourceSJsonCfg) (err err } } if jsnCfg.String_indexed_fields != nil { - rlcfg.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.String_indexed_fields)) + rlcfg.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.String_indexed_fields)) } if jsnCfg.Prefix_indexed_fields != nil { - rlcfg.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Prefix_indexed_fields)) + rlcfg.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Prefix_indexed_fields)) } if jsnCfg.Suffix_indexed_fields != nil { - rlcfg.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Suffix_indexed_fields)) + rlcfg.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Suffix_indexed_fields)) } if jsnCfg.Exists_indexed_fields != nil { - rlcfg.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Exists_indexed_fields)) + rlcfg.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Exists_indexed_fields)) } if jsnCfg.Notexists_indexed_fields != nil { - rlcfg.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Notexists_indexed_fields)) + rlcfg.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Notexists_indexed_fields)) } if jsnCfg.Nested_fields != nil { rlcfg.NestedFields = *jsnCfg.Nested_fields @@ -141,19 +142,19 @@ func (rlcfg ResourceSConfig) AsMapInterface(string) any { mp[utils.ThresholdSConnsCfg] = getInternalJSONConns(rlcfg.ThresholdSConns) } if rlcfg.StringIndexedFields != nil { - mp[utils.StringIndexedFieldsCfg] = utils.CloneStringSlice(*rlcfg.StringIndexedFields) + mp[utils.StringIndexedFieldsCfg] = slices.Clone(*rlcfg.StringIndexedFields) } if rlcfg.PrefixIndexedFields != nil { - mp[utils.PrefixIndexedFieldsCfg] = utils.CloneStringSlice(*rlcfg.PrefixIndexedFields) + mp[utils.PrefixIndexedFieldsCfg] = slices.Clone(*rlcfg.PrefixIndexedFields) } if rlcfg.SuffixIndexedFields != nil { - mp[utils.SuffixIndexedFieldsCfg] = utils.CloneStringSlice(*rlcfg.SuffixIndexedFields) + mp[utils.SuffixIndexedFieldsCfg] = slices.Clone(*rlcfg.SuffixIndexedFields) } if rlcfg.ExistsIndexedFields != nil { - mp[utils.ExistsIndexedFieldsCfg] = utils.CloneStringSlice(*rlcfg.ExistsIndexedFields) + mp[utils.ExistsIndexedFieldsCfg] = slices.Clone(*rlcfg.ExistsIndexedFields) } if rlcfg.NotExistsIndexedFields != nil { - mp[utils.NotExistsIndexedFieldsCfg] = utils.CloneStringSlice(*rlcfg.NotExistsIndexedFields) + mp[utils.NotExistsIndexedFieldsCfg] = slices.Clone(*rlcfg.NotExistsIndexedFields) } if rlcfg.StoreInterval != 0 { mp[utils.StoreIntervalCfg] = rlcfg.StoreInterval.String() @@ -195,23 +196,23 @@ func (rlcfg ResourceSConfig) Clone() (cln *ResourceSConfig) { Opts: rlcfg.Opts.Clone(), } if rlcfg.ThresholdSConns != nil { - cln.ThresholdSConns = utils.CloneStringSlice(rlcfg.ThresholdSConns) + cln.ThresholdSConns = slices.Clone(rlcfg.ThresholdSConns) } if rlcfg.StringIndexedFields != nil { - cln.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rlcfg.StringIndexedFields)) + cln.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*rlcfg.StringIndexedFields)) } if rlcfg.PrefixIndexedFields != nil { - cln.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rlcfg.PrefixIndexedFields)) + cln.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*rlcfg.PrefixIndexedFields)) } if rlcfg.SuffixIndexedFields != nil { - cln.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rlcfg.SuffixIndexedFields)) + cln.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*rlcfg.SuffixIndexedFields)) } if rlcfg.ExistsIndexedFields != nil { - cln.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rlcfg.ExistsIndexedFields)) + cln.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*rlcfg.ExistsIndexedFields)) } if rlcfg.NotExistsIndexedFields != nil { - cln.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rlcfg.NotExistsIndexedFields)) + cln.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*rlcfg.NotExistsIndexedFields)) } return } @@ -263,7 +264,7 @@ func diffResourceSJsonCfg(d *ResourceSJsonCfg, v1, v2 *ResourceSConfig) *Resourc if v1.IndexedSelects != v2.IndexedSelects { d.Indexed_selects = utils.BoolPointer(v2.IndexedSelects) } - if !utils.SliceStringEqual(v1.ThresholdSConns, v2.ThresholdSConns) { + if !slices.Equal(v1.ThresholdSConns, v2.ThresholdSConns) { d.Thresholds_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ThresholdSConns)) } if v1.StoreInterval != v2.StoreInterval { diff --git a/config/routescfg.go b/config/routescfg.go index 55a25feae..5affc4016 100644 --- a/config/routescfg.go +++ b/config/routescfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -122,19 +123,19 @@ func (rts *RouteSCfg) loadFromJSONCfg(jsnCfg *RouteSJsonCfg) (err error) { rts.IndexedSelects = *jsnCfg.Indexed_selects } if jsnCfg.String_indexed_fields != nil { - rts.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.String_indexed_fields)) + rts.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.String_indexed_fields)) } if jsnCfg.Prefix_indexed_fields != nil { - rts.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Prefix_indexed_fields)) + rts.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Prefix_indexed_fields)) } if jsnCfg.Suffix_indexed_fields != nil { - rts.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Suffix_indexed_fields)) + rts.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Suffix_indexed_fields)) } if jsnCfg.Exists_indexed_fields != nil { - rts.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Exists_indexed_fields)) + rts.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Exists_indexed_fields)) } if jsnCfg.Notexists_indexed_fields != nil { - rts.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Notexists_indexed_fields)) + rts.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Notexists_indexed_fields)) } if jsnCfg.Attributes_conns != nil { rts.AttributeSConns = updateInternalConns(*jsnCfg.Attributes_conns, utils.MetaAttributes) @@ -229,19 +230,19 @@ func (rts RouteSCfg) AsMapInterface(string) any { utils.OptsCfg: opts, } if rts.StringIndexedFields != nil { - mp[utils.StringIndexedFieldsCfg] = utils.CloneStringSlice(*rts.StringIndexedFields) + mp[utils.StringIndexedFieldsCfg] = slices.Clone(*rts.StringIndexedFields) } if rts.PrefixIndexedFields != nil { - mp[utils.PrefixIndexedFieldsCfg] = utils.CloneStringSlice(*rts.PrefixIndexedFields) + mp[utils.PrefixIndexedFieldsCfg] = slices.Clone(*rts.PrefixIndexedFields) } if rts.SuffixIndexedFields != nil { - mp[utils.SuffixIndexedFieldsCfg] = utils.CloneStringSlice(*rts.SuffixIndexedFields) + mp[utils.SuffixIndexedFieldsCfg] = slices.Clone(*rts.SuffixIndexedFields) } if rts.ExistsIndexedFields != nil { - mp[utils.ExistsIndexedFieldsCfg] = utils.CloneStringSlice(*rts.ExistsIndexedFields) + mp[utils.ExistsIndexedFieldsCfg] = slices.Clone(*rts.ExistsIndexedFields) } if rts.NotExistsIndexedFields != nil { - mp[utils.NotExistsIndexedFieldsCfg] = utils.CloneStringSlice(*rts.NotExistsIndexedFields) + mp[utils.NotExistsIndexedFieldsCfg] = slices.Clone(*rts.NotExistsIndexedFields) } if rts.AttributeSConns != nil { mp[utils.AttributeSConnsCfg] = getInternalJSONConns(rts.AttributeSConns) @@ -274,34 +275,34 @@ func (rts RouteSCfg) Clone() (cln *RouteSCfg) { Opts: rts.Opts.Clone(), } if rts.AttributeSConns != nil { - cln.AttributeSConns = utils.CloneStringSlice(rts.AttributeSConns) + cln.AttributeSConns = slices.Clone(rts.AttributeSConns) } if rts.ResourceSConns != nil { - cln.ResourceSConns = utils.CloneStringSlice(rts.ResourceSConns) + cln.ResourceSConns = slices.Clone(rts.ResourceSConns) } if rts.StatSConns != nil { - cln.StatSConns = utils.CloneStringSlice(rts.StatSConns) + cln.StatSConns = slices.Clone(rts.StatSConns) } if rts.RateSConns != nil { - cln.RateSConns = utils.CloneStringSlice(rts.RateSConns) + cln.RateSConns = slices.Clone(rts.RateSConns) } if rts.AccountSConns != nil { - cln.AccountSConns = utils.CloneStringSlice(rts.AccountSConns) + cln.AccountSConns = slices.Clone(rts.AccountSConns) } if rts.StringIndexedFields != nil { - cln.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rts.StringIndexedFields)) + cln.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*rts.StringIndexedFields)) } if rts.PrefixIndexedFields != nil { - cln.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rts.PrefixIndexedFields)) + cln.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*rts.PrefixIndexedFields)) } if rts.SuffixIndexedFields != nil { - cln.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rts.SuffixIndexedFields)) + cln.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*rts.SuffixIndexedFields)) } if rts.ExistsIndexedFields != nil { - cln.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rts.ExistsIndexedFields)) + cln.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*rts.ExistsIndexedFields)) } if rts.NotExistsIndexedFields != nil { - cln.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*rts.NotExistsIndexedFields)) + cln.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*rts.NotExistsIndexedFields)) } return } @@ -385,19 +386,19 @@ func diffRouteSJsonCfg(d *RouteSJsonCfg, v1, v2 *RouteSCfg) *RouteSJsonCfg { if v1.NestedFields != v2.NestedFields { d.Nested_fields = utils.BoolPointer(v2.NestedFields) } - if !utils.SliceStringEqual(v1.AttributeSConns, v2.AttributeSConns) { + if !slices.Equal(v1.AttributeSConns, v2.AttributeSConns) { d.Attributes_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AttributeSConns)) } - if !utils.SliceStringEqual(v1.ResourceSConns, v2.ResourceSConns) { + if !slices.Equal(v1.ResourceSConns, v2.ResourceSConns) { d.Resources_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ResourceSConns)) } - if !utils.SliceStringEqual(v1.StatSConns, v2.StatSConns) { + if !slices.Equal(v1.StatSConns, v2.StatSConns) { d.Stats_conns = utils.SliceStringPointer(getInternalJSONConns(v2.StatSConns)) } - if !utils.SliceStringEqual(v1.RateSConns, v2.RateSConns) { + if !slices.Equal(v1.RateSConns, v2.RateSConns) { d.Rates_conns = utils.SliceStringPointer(getInternalJSONConns(v2.RateSConns)) } - if !utils.SliceStringEqual(v1.AccountSConns, v2.AccountSConns) { + if !slices.Equal(v1.AccountSConns, v2.AccountSConns) { d.Accounts_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AccountSConns)) } if v1.DefaultRatio != v2.DefaultRatio { diff --git a/config/sessionscfg.go b/config/sessionscfg.go index b98cb7675..65af001ed 100644 --- a/config/sessionscfg.go +++ b/config/sessionscfg.go @@ -20,6 +20,7 @@ package config import ( "fmt" + "slices" "strconv" "time" @@ -639,37 +640,37 @@ func (scfg SessionSCfg) Clone() (cln *SessionSCfg) { cln.DefaultUsage[k] = v } if scfg.ChargerSConns != nil { - cln.ChargerSConns = utils.CloneStringSlice(scfg.ChargerSConns) + cln.ChargerSConns = slices.Clone(scfg.ChargerSConns) } if scfg.ResourceSConns != nil { - cln.ResourceSConns = utils.CloneStringSlice(scfg.ResourceSConns) + cln.ResourceSConns = slices.Clone(scfg.ResourceSConns) } if scfg.ThresholdSConns != nil { - cln.ThresholdSConns = utils.CloneStringSlice(scfg.ThresholdSConns) + cln.ThresholdSConns = slices.Clone(scfg.ThresholdSConns) } if scfg.StatSConns != nil { - cln.StatSConns = utils.CloneStringSlice(scfg.StatSConns) + cln.StatSConns = slices.Clone(scfg.StatSConns) } if scfg.RouteSConns != nil { - cln.RouteSConns = utils.CloneStringSlice(scfg.RouteSConns) + cln.RouteSConns = slices.Clone(scfg.RouteSConns) } if scfg.AttributeSConns != nil { - cln.AttributeSConns = utils.CloneStringSlice(scfg.AttributeSConns) + cln.AttributeSConns = slices.Clone(scfg.AttributeSConns) } if scfg.CDRsConns != nil { - cln.CDRsConns = utils.CloneStringSlice(scfg.CDRsConns) + cln.CDRsConns = slices.Clone(scfg.CDRsConns) } if scfg.ReplicationConns != nil { - cln.ReplicationConns = utils.CloneStringSlice(scfg.ReplicationConns) + cln.ReplicationConns = slices.Clone(scfg.ReplicationConns) } if scfg.ActionSConns != nil { - cln.ActionSConns = utils.CloneStringSlice(scfg.ActionSConns) + cln.ActionSConns = slices.Clone(scfg.ActionSConns) } if scfg.RateSConns != nil { - cln.RateSConns = utils.CloneStringSlice(scfg.RateSConns) + cln.RateSConns = slices.Clone(scfg.RateSConns) } if scfg.AccountSConns != nil { - cln.AccountSConns = utils.CloneStringSlice(scfg.AccountSConns) + cln.AccountSConns = slices.Clone(scfg.AccountSConns) } return @@ -944,34 +945,34 @@ func diffSessionSJsonCfg(d *SessionSJsonCfg, v1, v2 *SessionSCfg) *SessionSJsonC if v1.ListenBigob != v2.ListenBigob { d.Listen_bigob = utils.StringPointer(v2.ListenBigob) } - if !utils.SliceStringEqual(v1.ChargerSConns, v2.ChargerSConns) { + if !slices.Equal(v1.ChargerSConns, v2.ChargerSConns) { d.Chargers_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ChargerSConns)) } - if !utils.SliceStringEqual(v1.ResourceSConns, v2.ResourceSConns) { + if !slices.Equal(v1.ResourceSConns, v2.ResourceSConns) { d.Resources_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ResourceSConns)) } - if !utils.SliceStringEqual(v1.ThresholdSConns, v2.ThresholdSConns) { + if !slices.Equal(v1.ThresholdSConns, v2.ThresholdSConns) { d.Thresholds_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ThresholdSConns)) } - if !utils.SliceStringEqual(v1.StatSConns, v2.StatSConns) { + if !slices.Equal(v1.StatSConns, v2.StatSConns) { d.Stats_conns = utils.SliceStringPointer(getInternalJSONConns(v2.StatSConns)) } - if !utils.SliceStringEqual(v1.RouteSConns, v2.RouteSConns) { + if !slices.Equal(v1.RouteSConns, v2.RouteSConns) { d.Routes_conns = utils.SliceStringPointer(getInternalJSONConns(v2.RouteSConns)) } - if !utils.SliceStringEqual(v1.AttributeSConns, v2.AttributeSConns) { + if !slices.Equal(v1.AttributeSConns, v2.AttributeSConns) { d.Cdrs_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AttributeSConns)) } - if !utils.SliceStringEqual(v1.CDRsConns, v2.CDRsConns) { + if !slices.Equal(v1.CDRsConns, v2.CDRsConns) { d.Replication_conns = utils.SliceStringPointer(getInternalJSONConns(v2.CDRsConns)) } - if !utils.SliceStringEqual(v1.ReplicationConns, v2.ReplicationConns) { + if !slices.Equal(v1.ReplicationConns, v2.ReplicationConns) { d.Attributes_conns = utils.SliceStringPointer(v2.ReplicationConns) } - if !utils.SliceStringEqual(v1.RateSConns, v2.RateSConns) { + if !slices.Equal(v1.RateSConns, v2.RateSConns) { d.Rates_conns = utils.SliceStringPointer(getInternalJSONConns(v2.RateSConns)) } - if !utils.SliceStringEqual(v1.AccountSConns, v2.AccountSConns) { + if !slices.Equal(v1.AccountSConns, v2.AccountSConns) { d.Accounts_conns = utils.SliceStringPointer(getInternalJSONConns(v2.AccountSConns)) } if v1.StoreSCosts != v2.StoreSCosts { @@ -995,7 +996,7 @@ func diffSessionSJsonCfg(d *SessionSJsonCfg, v1, v2 *SessionSCfg) *SessionSJsonC if v1.MinDurLowBalance != v2.MinDurLowBalance { d.Min_dur_low_balance = utils.StringPointer(v2.MinDurLowBalance.String()) } - if !utils.SliceStringEqual(v1.ActionSConns, v2.ActionSConns) { + if !slices.Equal(v1.ActionSConns, v2.ActionSConns) { d.Actions_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ActionSConns)) } d.Stir = diffSTIRJsonCfg(d.Stir, v1.STIRCfg, v2.STIRCfg) diff --git a/config/sipagentcfg.go b/config/sipagentcfg.go index c6d660d5f..4b3ba5cca 100644 --- a/config/sipagentcfg.go +++ b/config/sipagentcfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -108,7 +109,7 @@ func (sa SIPAgentCfg) Clone() (cln *SIPAgentCfg) { RetransmissionTimer: sa.RetransmissionTimer, } if sa.SessionSConns != nil { - cln.SessionSConns = utils.CloneStringSlice(sa.SessionSConns) + cln.SessionSConns = slices.Clone(sa.SessionSConns) } if sa.RequestProcessors != nil { cln.RequestProcessors = make([]*RequestProcessor, len(sa.RequestProcessors)) @@ -143,7 +144,7 @@ func diffSIPAgentJsonCfg(d *SIPAgentJsonCfg, v1, v2 *SIPAgentCfg, separator stri if v1.ListenNet != v2.ListenNet { d.Listen_net = utils.StringPointer(v2.ListenNet) } - if !utils.SliceStringEqual(v1.SessionSConns, v2.SessionSConns) { + if !slices.Equal(v1.SessionSConns, v2.SessionSConns) { d.Sessions_conns = utils.SliceStringPointer(getBiRPCInternalJSONConns(v2.SessionSConns)) } if v1.Timezone != v2.Timezone { diff --git a/config/statscfg.go b/config/statscfg.go index 95f3fc50a..6fa0b53f2 100644 --- a/config/statscfg.go +++ b/config/statscfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -101,19 +102,19 @@ func (st *StatSCfg) loadFromJSONCfg(jsnCfg *StatServJsonCfg) (err error) { st.ThresholdSConns = updateInternalConns(*jsnCfg.Thresholds_conns, utils.MetaThresholds) } if jsnCfg.String_indexed_fields != nil { - st.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice((*jsnCfg.String_indexed_fields))) + st.StringIndexedFields = utils.SliceStringPointer(slices.Clone((*jsnCfg.String_indexed_fields))) } if jsnCfg.Prefix_indexed_fields != nil { - st.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice((*jsnCfg.Prefix_indexed_fields))) + st.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone((*jsnCfg.Prefix_indexed_fields))) } if jsnCfg.Suffix_indexed_fields != nil { - st.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice((*jsnCfg.Suffix_indexed_fields))) + st.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone((*jsnCfg.Suffix_indexed_fields))) } if jsnCfg.Exists_indexed_fields != nil { - st.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Exists_indexed_fields)) + st.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Exists_indexed_fields)) } if jsnCfg.Notexists_indexed_fields != nil { - st.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Notexists_indexed_fields)) + st.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Notexists_indexed_fields)) } if jsnCfg.Nested_fields != nil { st.NestedFields = *jsnCfg.Nested_fields @@ -144,19 +145,19 @@ func (st StatSCfg) AsMapInterface(string) any { mp[utils.StoreIntervalCfg] = st.StoreInterval.String() } if st.StringIndexedFields != nil { - mp[utils.StringIndexedFieldsCfg] = utils.CloneStringSlice(*st.StringIndexedFields) + mp[utils.StringIndexedFieldsCfg] = slices.Clone(*st.StringIndexedFields) } if st.PrefixIndexedFields != nil { - mp[utils.PrefixIndexedFieldsCfg] = utils.CloneStringSlice(*st.PrefixIndexedFields) + mp[utils.PrefixIndexedFieldsCfg] = slices.Clone(*st.PrefixIndexedFields) } if st.SuffixIndexedFields != nil { - mp[utils.SuffixIndexedFieldsCfg] = utils.CloneStringSlice(*st.SuffixIndexedFields) + mp[utils.SuffixIndexedFieldsCfg] = slices.Clone(*st.SuffixIndexedFields) } if st.ExistsIndexedFields != nil { - mp[utils.ExistsIndexedFieldsCfg] = utils.CloneStringSlice(*st.ExistsIndexedFields) + mp[utils.ExistsIndexedFieldsCfg] = slices.Clone(*st.ExistsIndexedFields) } if st.NotExistsIndexedFields != nil { - mp[utils.NotExistsIndexedFieldsCfg] = utils.CloneStringSlice(*st.NotExistsIndexedFields) + mp[utils.NotExistsIndexedFieldsCfg] = slices.Clone(*st.NotExistsIndexedFields) } if st.ThresholdSConns != nil { mp[utils.ThresholdSConnsCfg] = getInternalJSONConns(st.ThresholdSConns) @@ -203,22 +204,22 @@ func (st StatSCfg) Clone() (cln *StatSCfg) { Opts: st.Opts.Clone(), } if st.ThresholdSConns != nil { - cln.ThresholdSConns = utils.CloneStringSlice(st.ThresholdSConns) + cln.ThresholdSConns = slices.Clone(st.ThresholdSConns) } if st.StringIndexedFields != nil { - cln.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*st.StringIndexedFields)) + cln.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*st.StringIndexedFields)) } if st.PrefixIndexedFields != nil { - cln.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*st.PrefixIndexedFields)) + cln.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*st.PrefixIndexedFields)) } if st.SuffixIndexedFields != nil { - cln.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*st.SuffixIndexedFields)) + cln.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*st.SuffixIndexedFields)) } if st.ExistsIndexedFields != nil { - cln.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*st.ExistsIndexedFields)) + cln.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*st.ExistsIndexedFields)) } if st.NotExistsIndexedFields != nil { - cln.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*st.NotExistsIndexedFields)) + cln.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*st.NotExistsIndexedFields)) } return } @@ -281,7 +282,7 @@ func diffStatServJsonCfg(d *StatServJsonCfg, v1, v2 *StatSCfg) *StatServJsonCfg if v1.StoreUncompressedLimit != v2.StoreUncompressedLimit { d.Store_uncompressed_limit = utils.IntPointer(v2.StoreUncompressedLimit) } - if !utils.SliceStringEqual(v1.ThresholdSConns, v2.ThresholdSConns) { + if !slices.Equal(v1.ThresholdSConns, v2.ThresholdSConns) { d.Thresholds_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ThresholdSConns)) } d.String_indexed_fields = diffIndexSlice(d.String_indexed_fields, v1.StringIndexedFields, v2.StringIndexedFields) diff --git a/config/stordbcfg.go b/config/stordbcfg.go index 1ef0b66e8..d4ef604b4 100644 --- a/config/stordbcfg.go +++ b/config/stordbcfg.go @@ -21,6 +21,7 @@ package config import ( "fmt" "reflect" + "slices" "strconv" "strings" "time" @@ -199,16 +200,16 @@ func (dbcfg StorDbCfg) Clone() (cln *StorDbCfg) { cln.Items[key] = item.Clone() } if dbcfg.StringIndexedFields != nil { - cln.StringIndexedFields = utils.CloneStringSlice(dbcfg.StringIndexedFields) + cln.StringIndexedFields = slices.Clone(dbcfg.StringIndexedFields) } if dbcfg.PrefixIndexedFields != nil { - cln.PrefixIndexedFields = utils.CloneStringSlice(dbcfg.PrefixIndexedFields) + cln.PrefixIndexedFields = slices.Clone(dbcfg.PrefixIndexedFields) } if dbcfg.RmtConns != nil { - cln.RmtConns = utils.CloneStringSlice(dbcfg.RmtConns) + cln.RmtConns = slices.Clone(dbcfg.RmtConns) } if dbcfg.RplConns != nil { - cln.RplConns = utils.CloneStringSlice(dbcfg.RplConns) + cln.RplConns = slices.Clone(dbcfg.RplConns) } return } @@ -301,18 +302,18 @@ func diffStorDBJsonCfg(d *DbJsonCfg, v1, v2 *StorDbCfg) *DbJsonCfg { if v1.Password != v2.Password { d.Db_password = utils.StringPointer(v2.Password) } - if !utils.SliceStringEqual(v1.RmtConns, v2.RmtConns) { + if !slices.Equal(v1.RmtConns, v2.RmtConns) { d.Remote_conns = &v2.RmtConns } - if !utils.SliceStringEqual(v1.RplConns, v2.RplConns) { + if !slices.Equal(v1.RplConns, v2.RplConns) { d.Replication_conns = &v2.RplConns } - if !utils.SliceStringEqual(v1.StringIndexedFields, v2.StringIndexedFields) { + if !slices.Equal(v1.StringIndexedFields, v2.StringIndexedFields) { d.String_indexed_fields = &v2.StringIndexedFields } - if !utils.SliceStringEqual(v1.PrefixIndexedFields, v2.PrefixIndexedFields) { + if !slices.Equal(v1.PrefixIndexedFields, v2.PrefixIndexedFields) { d.Prefix_indexed_fields = &v2.PrefixIndexedFields } diff --git a/config/thresholdscfg.go b/config/thresholdscfg.go index 6bb541177..55c1b404f 100644 --- a/config/thresholdscfg.go +++ b/config/thresholdscfg.go @@ -19,6 +19,7 @@ along with this program. If not, see package config import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -86,19 +87,19 @@ func (t *ThresholdSCfg) loadFromJSONCfg(jsnCfg *ThresholdSJsonCfg) (err error) { } } if jsnCfg.String_indexed_fields != nil { - t.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.String_indexed_fields)) + t.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.String_indexed_fields)) } if jsnCfg.Prefix_indexed_fields != nil { - t.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Prefix_indexed_fields)) + t.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Prefix_indexed_fields)) } if jsnCfg.Suffix_indexed_fields != nil { - t.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Suffix_indexed_fields)) + t.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Suffix_indexed_fields)) } if jsnCfg.Exists_indexed_fields != nil { - t.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Exists_indexed_fields)) + t.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Exists_indexed_fields)) } if jsnCfg.Notexists_indexed_fields != nil { - t.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*jsnCfg.Notexists_indexed_fields)) + t.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*jsnCfg.Notexists_indexed_fields)) } if jsnCfg.Nested_fields != nil { t.NestedFields = *jsnCfg.Nested_fields @@ -130,19 +131,19 @@ func (t ThresholdSCfg) AsMapInterface(string) any { } if t.StringIndexedFields != nil { - mp[utils.StringIndexedFieldsCfg] = utils.CloneStringSlice(*t.StringIndexedFields) + mp[utils.StringIndexedFieldsCfg] = slices.Clone(*t.StringIndexedFields) } if t.PrefixIndexedFields != nil { - mp[utils.PrefixIndexedFieldsCfg] = utils.CloneStringSlice(*t.PrefixIndexedFields) + mp[utils.PrefixIndexedFieldsCfg] = slices.Clone(*t.PrefixIndexedFields) } if t.SuffixIndexedFields != nil { - mp[utils.SuffixIndexedFieldsCfg] = utils.CloneStringSlice(*t.SuffixIndexedFields) + mp[utils.SuffixIndexedFieldsCfg] = slices.Clone(*t.SuffixIndexedFields) } if t.ExistsIndexedFields != nil { - mp[utils.ExistsIndexedFieldsCfg] = utils.CloneStringSlice(*t.ExistsIndexedFields) + mp[utils.ExistsIndexedFieldsCfg] = slices.Clone(*t.ExistsIndexedFields) } if t.NotExistsIndexedFields != nil { - mp[utils.NotExistsIndexedFieldsCfg] = utils.CloneStringSlice(*t.NotExistsIndexedFields) + mp[utils.NotExistsIndexedFieldsCfg] = slices.Clone(*t.NotExistsIndexedFields) } if t.ActionSConns != nil { mp[utils.ActionSConnsCfg] = getInternalJSONConns(t.ActionSConns) @@ -179,22 +180,22 @@ func (t ThresholdSCfg) Clone() (cln *ThresholdSCfg) { } if t.StringIndexedFields != nil { - cln.StringIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*t.StringIndexedFields)) + cln.StringIndexedFields = utils.SliceStringPointer(slices.Clone(*t.StringIndexedFields)) } if t.PrefixIndexedFields != nil { - cln.PrefixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*t.PrefixIndexedFields)) + cln.PrefixIndexedFields = utils.SliceStringPointer(slices.Clone(*t.PrefixIndexedFields)) } if t.SuffixIndexedFields != nil { - cln.SuffixIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*t.SuffixIndexedFields)) + cln.SuffixIndexedFields = utils.SliceStringPointer(slices.Clone(*t.SuffixIndexedFields)) } if t.ExistsIndexedFields != nil { - cln.ExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*t.ExistsIndexedFields)) + cln.ExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*t.ExistsIndexedFields)) } if t.NotExistsIndexedFields != nil { - cln.NotExistsIndexedFields = utils.SliceStringPointer(utils.CloneStringSlice(*t.NotExistsIndexedFields)) + cln.NotExistsIndexedFields = utils.SliceStringPointer(slices.Clone(*t.NotExistsIndexedFields)) } if t.ActionSConns != nil { - cln.ActionSConns = utils.CloneStringSlice(t.ActionSConns) + cln.ActionSConns = slices.Clone(t.ActionSConns) } return } @@ -253,7 +254,7 @@ func diffThresholdSJsonCfg(d *ThresholdSJsonCfg, v1, v2 *ThresholdSCfg) *Thresho if v1.NestedFields != v2.NestedFields { d.Nested_fields = utils.BoolPointer(v2.NestedFields) } - if !utils.SliceStringEqual(v1.ActionSConns, v2.ActionSConns) { + if !slices.Equal(v1.ActionSConns, v2.ActionSConns) { d.Actions_conns = utils.SliceStringPointer(getInternalJSONConns(v2.ActionSConns)) } d.Opts = diffThresholdsOptsJsonCfg(d.Opts, v1.Opts, v2.Opts) diff --git a/console/command_executer.go b/console/command_executer.go index b518fdf57..ecf00639b 100644 --- a/console/command_executer.go +++ b/console/command_executer.go @@ -24,6 +24,7 @@ import ( "fmt" "reflect" "regexp" + "slices" "sort" "strings" "time" @@ -128,7 +129,7 @@ func FromJSON(jsn []byte, interestingFields []string) (line string) { } for _, group := range jsonR.FindAllSubmatch(jsn, -1) { if len(group) == 3 { - if utils.IsSliceMember(interestingFields, string(group[1])) { + if slices.Contains(interestingFields, string(group[1])) { line += fmt.Sprintf("%s=%s ", group[1], group[2]) } } diff --git a/engine/attributes.go b/engine/attributes.go index b498072c3..a524ae742 100644 --- a/engine/attributes.go +++ b/engine/attributes.go @@ -21,6 +21,7 @@ package engine import ( "fmt" "math" + "slices" "sort" "strconv" "strings" @@ -202,7 +203,7 @@ func (alS *AttributeS) processEvent(ctx *context.Context, tnt string, args *util } substitute := utils.IfaceAsString(out) //add only once the Path in AlteredFields - if !utils.IsSliceMember(rply.AlteredFields[0].Fields, attribute.Path) { + if !slices.Contains(rply.AlteredFields[0].Fields, attribute.Path) { rply.AlteredFields[0].Fields = append(rply.AlteredFields[0].Fields, attribute.Path) } if attribute.Path == utils.MetaTenant { diff --git a/engine/datamanager.go b/engine/datamanager.go index 39f253356..bb3b0987b 100644 --- a/engine/datamanager.go +++ b/engine/datamanager.go @@ -20,6 +20,7 @@ package engine import ( "fmt" + "slices" "strings" "github.com/cgrates/baningo" @@ -894,7 +895,7 @@ func (dm *DataManager) SetStatQueueProfile(ctx *context.Context, sqp *StatQueueP for _, metric := range sqp.Metrics { // add missing metrics and recreate the old metrics that changed cMetricIDs.Add(metric.MetricID) if oSqMetric, has := oSq.SQMetrics[metric.MetricID]; !has || - !utils.SliceStringEqual(oSqMetric.GetFilterIDs(), metric.FilterIDs) { // recreate it if the filter changed + !slices.Equal(oSqMetric.GetFilterIDs(), metric.FilterIDs) { // recreate it if the filter changed if oSq.SQMetrics[metric.MetricID], err = NewStatMetric(metric.MetricID, uint64(sqp.MinItems), metric.FilterIDs); err != nil { return diff --git a/engine/dispatcherprfl.go b/engine/dispatcherprfl.go index 5e9eb9f78..38bb0b05c 100644 --- a/engine/dispatcherprfl.go +++ b/engine/dispatcherprfl.go @@ -20,6 +20,7 @@ package engine import ( "math/rand" + "slices" "sort" "strconv" "strings" @@ -45,7 +46,7 @@ func (dC *DispatcherHostProfile) Clone() (cln *DispatcherHostProfile) { Blocker: dC.Blocker, } if dC.FilterIDs != nil { - cln.FilterIDs = utils.CloneStringSlice(dC.FilterIDs) + cln.FilterIDs = slices.Clone(dC.FilterIDs) } if dC.Params != nil { cln.Params = make(map[string]any) diff --git a/engine/exportrequest.go b/engine/exportrequest.go index 17f745956..652bd9ef2 100644 --- a/engine/exportrequest.go +++ b/engine/exportrequest.go @@ -20,6 +20,7 @@ package engine import ( "fmt" + "slices" "strings" "github.com/cgrates/birpc/context" @@ -122,7 +123,7 @@ func (eeR *ExportRequest) SetFields(ctx *context.Context, tplFlds []*config.FCTe return } else if fullPath == nil { // no dynamic path fullPath = &utils.FullPath{ - PathSlice: utils.CloneStringSlice(tplFld.GetPathSlice()), // need to clone so me do not modify the template + PathSlice: slices.Clone(tplFld.GetPathSlice()), // need to clone so me do not modify the template Path: tplFld.Path, } } diff --git a/engine/filters.go b/engine/filters.go index a6cb7bbdb..dcb4c1da6 100644 --- a/engine/filters.go +++ b/engine/filters.go @@ -23,6 +23,7 @@ import ( "net" "reflect" "regexp" + "slices" "strconv" "strings" "time" @@ -292,7 +293,7 @@ func (fltr *FilterRule) IsValid() bool { if fltr.Element == utils.EmptyString { return fltr.Type == utils.MetaNever } - if len(fltr.Values) == 0 && !utils.IsSliceMember([]string{utils.MetaExists, utils.MetaNotExists, + if len(fltr.Values) == 0 && !slices.Contains([]string{utils.MetaExists, utils.MetaNotExists, utils.MetaEmpty, utils.MetaNotEmpty}, fltr.Type) { return false } diff --git a/engine/libdynopts.go b/engine/libdynopts.go index 1019fb209..5e9256650 100644 --- a/engine/libdynopts.go +++ b/engine/libdynopts.go @@ -19,6 +19,7 @@ along with this program. If not, see package engine import ( + "slices" "time" "github.com/cgrates/birpc/context" @@ -37,7 +38,7 @@ func GetFloat64Opts(ctx *context.Context, tnt string, ev *utils.CGREvent, fS *Fi } evDP := ev.AsDataProvider() for _, opt := range dynOpts { // iterate through the options - if !utils.IsSliceMember([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { + if !slices.Contains([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { continue } if pass, err := fS.Pass(ctx, tnt, opt.FilterIDs, evDP); err != nil { // check if the filter is passing for the DataProvider and return the option if it does @@ -60,7 +61,7 @@ func GetDurationOpts(ctx *context.Context, tnt string, ev *utils.CGREvent, fS *F } evDP := ev.AsDataProvider() for _, opt := range dynOpts { // iterate through the options - if !utils.IsSliceMember([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { + if !slices.Contains([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { continue } if pass, err := fS.Pass(ctx, tnt, opt.FilterIDs, evDP); err != nil { // check if the filter is passing for the DataProvider and return the option if it does @@ -83,7 +84,7 @@ func GetStringOpts(ctx *context.Context, tnt string, ev *utils.CGREvent, fS *Fil } evDP := ev.AsDataProvider() for _, opt := range dynOpts { // iterate through the options - if !utils.IsSliceMember([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { + if !slices.Contains([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { continue } if pass, err := fS.Pass(ctx, tnt, opt.FilterIDs, evDP); err != nil { // check if the filter is passing for the DataProvider and return the option if it does @@ -106,7 +107,7 @@ func GetTimeOpts(ctx *context.Context, tnt string, ev *utils.CGREvent, fS *Filte } evDP := ev.AsDataProvider() for _, opt := range dynOpts { // iterate through the options - if !utils.IsSliceMember([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { + if !slices.Contains([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { continue } var pass bool @@ -130,7 +131,7 @@ func GetStringSliceOpts(ctx *context.Context, tnt string, ev *utils.CGREvent, fS } evDP := ev.AsDataProvider() for _, opt := range dynOpts { // iterate through the options - if !utils.IsSliceMember([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { + if !slices.Contains([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { continue } if pass, err := fS.Pass(ctx, tnt, opt.FilterIDs, evDP); err != nil { // check if the filter is passing for the DataProvider and return the option if it does @@ -157,7 +158,7 @@ func GetIntOpts(ctx *context.Context, tnt string, ev *utils.CGREvent, fS *Filter } evDP := ev.AsDataProvider() for _, opt := range dynOpts { // iterate through the options - if !utils.IsSliceMember([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { + if !slices.Contains([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { continue } if pass, err := fS.Pass(ctx, tnt, opt.FilterIDs, evDP); err != nil { // check if the filter is passing for the DataProvider and return the option if it does @@ -188,7 +189,7 @@ func GetBoolOpts(ctx *context.Context, tnt string, dP utils.DataProvider, fS *Fi } } for _, opt := range dynOpts { // iterate through the options - if !utils.IsSliceMember([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { + if !slices.Contains([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { continue } if pass, err := fS.Pass(ctx, tnt, opt.FilterIDs, dP); err != nil { // check if the filter is passing for the DataProvider and return the option if it does @@ -211,7 +212,7 @@ func GetDecimalBigOpts(ctx *context.Context, tnt string, ev *utils.CGREvent, fS } evDP := ev.AsDataProvider() for _, opt := range dynOpts { // iterate through the options - if !utils.IsSliceMember([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { + if !slices.Contains([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { continue } if pass, err := fS.Pass(ctx, tnt, opt.FilterIDs, evDP); err != nil { // check if the filter is passing for the DataProvider and return the option if it does @@ -234,7 +235,7 @@ func GetInterfaceOpts(ctx *context.Context, tnt string, ev *utils.CGREvent, fS * } evDP := ev.AsDataProvider() for _, opt := range dynOpts { // iterate through the options - if !utils.IsSliceMember([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { + if !slices.Contains([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { continue } if pass, err := fS.Pass(ctx, tnt, opt.FilterIDs, evDP); err != nil { // check if the filter is passing for the DataProvider and return the option if it does @@ -261,7 +262,7 @@ func GetIntPointerOpts(ctx *context.Context, tnt string, ev *utils.CGREvent, fS } evDP := ev.AsDataProvider() for _, opt := range dynOpts { // iterate through the options - if !utils.IsSliceMember([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { + if !slices.Contains([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { continue } if pass, err := fS.Pass(ctx, tnt, opt.FilterIDs, evDP); err != nil { // check if the filter is passing for the DataProvider and return the option if it does @@ -294,7 +295,7 @@ func GetDurationPointerOptsFromMultipleMaps(ctx *context.Context, tnt string, ev utils.MetaReq: eventStart, } for _, opt := range dynOpts { // iterate through the options - if !utils.IsSliceMember([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { + if !slices.Contains([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { continue } if pass, err := fS.Pass(ctx, tnt, opt.FilterIDs, evMS); err != nil { // check if the filter is passing for the DataProvider and return the option if it does @@ -327,7 +328,7 @@ func GetDurationOptsFromMultipleMaps(ctx *context.Context, tnt string, eventStar utils.MetaReq: eventStart, } for _, opt := range dynOpts { // iterate through the options - if !utils.IsSliceMember([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { + if !slices.Contains([]string{utils.EmptyString, utils.MetaAny, tnt}, opt.Tenant) { continue } if pass, err := fS.Pass(ctx, tnt, opt.FilterIDs, evMS); err != nil { // check if the filter is passing for the DataProvider and return the option if it does diff --git a/engine/libindex_health.go b/engine/libindex_health.go index 6ef4d5382..f14171d03 100644 --- a/engine/libindex_health.go +++ b/engine/libindex_health.go @@ -20,6 +20,7 @@ package engine import ( "fmt" + "slices" "strings" "time" @@ -482,7 +483,7 @@ func getRevFltrIdxHealthFromReverse(ctx *context.Context, dm *DataManager, fltrC } return } - if !utils.IsSliceMember(filterIDs, fltrID) { // check the filters + if !slices.Contains(filterIDs, fltrID) { // check the filters key := utils.ConcatenatedKey(tnt, id) rply[indxType].BrokenReverseIndexes[key] = append(rply[indxType].BrokenReverseIndexes[key], fltrID) } diff --git a/engine/libindex_test.go b/engine/libindex_test.go index 11551f617..684a05fa7 100644 --- a/engine/libindex_test.go +++ b/engine/libindex_test.go @@ -20,6 +20,7 @@ package engine import ( "reflect" + "slices" "testing" "time" @@ -78,7 +79,7 @@ func TestComputeIndexes(t *testing.T) { if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(th.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(th.FilterIDs)), nil }, nil) if err != nil { t.Error(err) @@ -116,7 +117,7 @@ func TestComputeIndexesIDsNotNil(t *testing.T) { if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(th.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(th.FilterIDs)), nil }, nil) if err != utils.ErrNotFound { t.Errorf("Expected %v\n but received %v", utils.ErrNotFound, err) @@ -3035,7 +3036,7 @@ func TestComputeIndexesNilFilterIDs(t *testing.T) { if e != nil { return nil, e } - return utils.SliceStringPointer(utils.CloneStringSlice(th.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(th.FilterIDs)), nil }, nil) if err != nil { t.Error(err) @@ -3089,7 +3090,7 @@ func TestComputeIndexesNewFilterIndexErr(t *testing.T) { _, err := ComputeIndexes(context.Background(), dm, "cgrates.org", utils.EmptyString, utils.CacheThresholdFilterIndexes, &[]string{"THD_2"}, utils.NonTransactional, func(tnt, id, grp string) (*[]string, error) { - return utils.SliceStringPointer(utils.CloneStringSlice(thd.FilterIDs)), nil + return utils.SliceStringPointer(slices.Clone(thd.FilterIDs)), nil }, nil) if err != utils.ErrNotImplemented { t.Errorf("\nExpected error <%+v>, \nReceived error <%+v>", utils.ErrNotImplemented, err) diff --git a/engine/libtest.go b/engine/libtest.go index fe15f5dc4..39db10c55 100644 --- a/engine/libtest.go +++ b/engine/libtest.go @@ -26,6 +26,7 @@ import ( "os" "os/exec" "path" + "slices" "strings" "time" @@ -199,7 +200,7 @@ func InitStorDB(cfg *config.CGRConfig) error { dbPath)); err != nil { return err } - if utils.IsSliceMember([]string{utils.MetaMongo, utils.MetaMySQL, utils.MetaPostgres}, + if slices.Contains([]string{utils.MetaMongo, utils.MetaMySQL, utils.MetaPostgres}, cfg.StorDbCfg().Type) { if err := SetDBVersions(storDB); err != nil { return err diff --git a/engine/model_helpers.go b/engine/model_helpers.go index 6c544aab9..be7868230 100644 --- a/engine/model_helpers.go +++ b/engine/model_helpers.go @@ -22,6 +22,7 @@ import ( "fmt" "reflect" "regexp" + "slices" "strconv" "strings" "time" @@ -1605,7 +1606,7 @@ func DispatcherProfileToAPI(dpp *DispatcherProfile) (tpDPP *utils.TPDispatcherPr for i, host := range dpp.Hosts { tpDPP.Hosts[i] = &utils.TPDispatcherHostProfile{ ID: host.ID, - FilterIDs: utils.CloneStringSlice(host.FilterIDs), + FilterIDs: slices.Clone(host.FilterIDs), Weight: host.Weight, Params: make([]any, len(host.Params)), Blocker: host.Blocker, diff --git a/engine/route_cost_sort.go b/engine/route_cost_sort.go index 0e9698196..4f4f52154 100644 --- a/engine/route_cost_sort.go +++ b/engine/route_cost_sort.go @@ -20,6 +20,7 @@ package engine import ( "fmt" + "slices" "github.com/cgrates/birpc/context" "github.com/ericlagergren/decimal" @@ -65,7 +66,7 @@ func populateCostForRoutes(ctx *context.Context, cfg *config.CGRConfig, connMgr if len(route.AccountIDs) != 0 { // query AccountS for cost var acntCost utils.EventCharges - ev.APIOpts[utils.OptsAccountsProfileIDs] = utils.CloneStringSlice(route.AccountIDs) + ev.APIOpts[utils.OptsAccountsProfileIDs] = slices.Clone(route.AccountIDs) if err = connMgr.Call(ctx, cfg.RouteSCfg().AccountSConns, utils.AccountSv1MaxAbstracts, ev, &acntCost); err != nil { if extraOpts.ignoreErrors { @@ -90,7 +91,7 @@ func populateCostForRoutes(ctx *context.Context, cfg *config.CGRConfig, connMgr } srtRoute.SortingData[utils.AccountIDs] = acntIDs } else { // query RateS for cost - ev.APIOpts[utils.OptsRatesProfileIDs] = utils.CloneStringSlice(route.RateProfileIDs) + ev.APIOpts[utils.OptsRatesProfileIDs] = slices.Clone(route.RateProfileIDs) var rpCost utils.RateProfileCost if err = connMgr.Call(ctx, cfg.RouteSCfg().RateSConns, utils.RateSv1CostForEvent, ev, &rpCost); err != nil { diff --git a/engine/statmetrics.go b/engine/statmetrics.go index d4db0fc93..4fc7d2833 100644 --- a/engine/statmetrics.go +++ b/engine/statmetrics.go @@ -20,6 +20,7 @@ package engine import ( "fmt" + "slices" "strconv" "strings" @@ -457,7 +458,7 @@ func (ddc *StatDDC) Clone() StatMetric { Count: ddc.Count, Events: make(map[string]map[string]uint64), MinItems: ddc.MinItems, - FilterIDs: utils.CloneStringSlice(ddc.FilterIDs), + FilterIDs: slices.Clone(ddc.FilterIDs), } for k, v := range ddc.Events { cln.Events[k] = make(map[string]uint64) @@ -606,7 +607,7 @@ func (sum *Metric) Clone() (cln *Metric) { Count: sum.Count, Events: make(map[string]*DecimalWithCompress), MinItems: sum.MinItems, - FilterIDs: utils.CloneStringSlice(sum.FilterIDs), + FilterIDs: slices.Clone(sum.FilterIDs), } for k, v := range sum.Events { cln.Events[k] = &(*v) @@ -836,7 +837,7 @@ func (dst *StatDistinct) Clone() StatMetric { MinItems: dst.MinItems, FieldName: dst.FieldName, FieldValues: make(map[string]utils.StringSet), - FilterIDs: utils.CloneStringSlice(dst.FilterIDs), + FilterIDs: slices.Clone(dst.FilterIDs), } for k, v := range dst.Events { cln.Events[k] = make(map[string]uint64) diff --git a/engine/z_attributes_test.go b/engine/z_attributes_test.go index 5c6f98dbe..1f9ecb358 100644 --- a/engine/z_attributes_test.go +++ b/engine/z_attributes_test.go @@ -3773,7 +3773,9 @@ func TestAttributesV1ProcessEvent(t *testing.T) { if err != nil { t.Errorf("\nExpected <%+v>, \nReceived <%+v>", nil, err) } - if !reflect.DeepEqual(expected, rply) { + if sort.Slice(rply.AlteredFields[0].Fields, func(i, j int) bool { + return rply.AlteredFields[0].Fields[i] < rply.AlteredFields[0].Fields[j] + }); !reflect.DeepEqual(expected, rply) { t.Errorf("\nExpected <%+v>, \nReceived <%+v>", utils.ToJSON(expected), utils.ToJSON(rply)) } } diff --git a/ers/ers.go b/ers/ers.go index d8acdf119..94c871169 100644 --- a/ers/ers.go +++ b/ers/ers.go @@ -24,6 +24,7 @@ import ( "fmt" "os" "path" + "slices" "sort" "strings" "sync" @@ -291,7 +292,7 @@ func (erS *ERService) processPartialEvent(ev *utils.CGREvent, rdrCfg *config.Eve erS.cfg.GeneralCfg().RSRSep); err != nil { return } - if partial := cgrEv.APIOpts[utils.PartialOpt]; !utils.IsSliceMember([]string{utils.FalseStr, utils.EmptyString}, + if partial := cgrEv.APIOpts[utils.PartialOpt]; !slices.Contains([]string{utils.FalseStr, utils.EmptyString}, utils.IfaceAsString(partial)) { // if is still partial set it back in cache erS.partialCache.Set(originID, cgrEvs, nil) return diff --git a/loaders/libloader.go b/loaders/libloader.go index 249db82fb..dea17399c 100644 --- a/loaders/libloader.go +++ b/loaders/libloader.go @@ -20,6 +20,7 @@ package loaders import ( "fmt" + "slices" "strings" "github.com/cgrates/birpc/context" @@ -161,7 +162,7 @@ func (ar *record) SetFields(ctx *context.Context, tmpls []*config.FCTemplate, fi return } else if fullPath == nil { // no dynamic path fullPath = &utils.FullPath{ - PathSlice: utils.CloneStringSlice(fld.GetPathSlice()), // need to clone so me do not modify the template + PathSlice: slices.Clone(fld.GetPathSlice()), // need to clone so me do not modify the template Path: fld.Path, } } @@ -205,7 +206,7 @@ func (ar *record) Remove(fullPath *utils.FullPath) error { Path: fullPath.Path, })*/ case utils.MetaTmp: - return ar.tmp.Remove(utils.CloneStringSlice(fullPath.PathSlice[1:])) + return ar.tmp.Remove(slices.Clone(fullPath.PathSlice[1:])) case utils.MetaUCH: ar.cache.Remove(fullPath.Path[5:]) } diff --git a/sessions/libsessions.go b/sessions/libsessions.go index 479903e0c..0c529bd3e 100644 --- a/sessions/libsessions.go +++ b/sessions/libsessions.go @@ -20,6 +20,7 @@ package sessions import ( "errors" + "slices" "strings" "time" @@ -184,10 +185,10 @@ func (pi *ProcessedStirIdentity) VerifyPayload(originatorTn, originatorURI, dest return errors.New("wrong originatorTn") } if destinationURI != utils.EmptyString { - if !utils.SliceHasMember(pi.Payload.Dest.URI, destinationURI) { + if !slices.Contains(pi.Payload.Dest.URI, destinationURI) { return errors.New("wrong destinationURI") } - } else if !utils.SliceHasMember(pi.Payload.Dest.Tn, destinationTn) { + } else if !slices.Contains(pi.Payload.Dest.Tn, destinationTn) { return errors.New("wrong destinationTn") } return diff --git a/sessions/sessions.go b/sessions/sessions.go index 9dfd92e9d..16e7fe3de 100644 --- a/sessions/sessions.go +++ b/sessions/sessions.go @@ -23,6 +23,7 @@ import ( "fmt" "math/rand" "runtime" + "slices" "strings" "sync" "time" @@ -1402,7 +1403,7 @@ func (sS *SessionS) chargeEvent(ctx *context.Context, cgrEv *utils.CGREvent, for } ev := engine.MapEvent(cgrEv.Event) usage := maxUsage - if utils.SliceHasMember(utils.PostPaidRatedSlice, ev.GetStringIgnoreErrors(utils.RequestType)) { + if slices.Contains(utils.PostPaidRatedSlice, ev.GetStringIgnoreErrors(utils.RequestType)) { usage = ev.GetDurationIgnoreErrors(utils.Usage) } //in case of postpaid and rated maxUsage = usage from event diff --git a/utils/account.go b/utils/account.go index a0693407f..d7373fa32 100644 --- a/utils/account.go +++ b/utils/account.go @@ -20,6 +20,7 @@ package utils import ( "fmt" + "slices" "sort" "strconv" "strings" @@ -244,7 +245,7 @@ func (cI *CostIncrement) Clone() (cIcln *CostIncrement) { func (uF *UnitFactor) Clone() *UnitFactor { cln := new(UnitFactor) if uF.FilterIDs != nil { - cln.FilterIDs = CloneStringSlice(uF.FilterIDs) + cln.FilterIDs = slices.Clone(uF.FilterIDs) } if uF.Factor != nil { cln.Factor = uF.Factor.Clone() diff --git a/utils/coreutils.go b/utils/coreutils.go index 6ac2b3bec..84b84587b 100644 --- a/utils/coreutils.go +++ b/utils/coreutils.go @@ -35,6 +35,7 @@ import ( "os" "path/filepath" "regexp" + "slices" "strconv" "strings" "sync" @@ -644,7 +645,7 @@ func (h HierarchyPath) Clone() (cln HierarchyPath) { if h == nil { return } - return CloneStringSlice(h) + return slices.Clone(h) } // Mask a number of characters in the suffix of the destination diff --git a/utils/eventcharges.go b/utils/eventcharges.go index ce339d0a7..a65cb43ea 100644 --- a/utils/eventcharges.go +++ b/utils/eventcharges.go @@ -18,6 +18,8 @@ along with this program. If not, see package utils +import "slices" + // NewEventChargers instantiates the EventChargers in a central place func NewEventCharges() (ec *EventCharges) { ec = &EventCharges{ @@ -330,10 +332,10 @@ func (ac *AccountCharge) Clone() *AccountCharge { cln.BalanceLimit = ac.BalanceLimit.Clone() } if ac.AttributeIDs != nil { - cln.AttributeIDs = CloneStringSlice(ac.AttributeIDs) + cln.AttributeIDs = slices.Clone(ac.AttributeIDs) } if ac.JoinedChargeIDs != nil { - cln.JoinedChargeIDs = CloneStringSlice(ac.JoinedChargeIDs) + cln.JoinedChargeIDs = slices.Clone(ac.JoinedChargeIDs) } return cln } diff --git a/utils/libdynamics.go b/utils/libdynamics.go index 93ba74b5a..cd5839499 100644 --- a/utils/libdynamics.go +++ b/utils/libdynamics.go @@ -18,6 +18,7 @@ along with this program. If not, see package utils import ( + "slices" "time" "github.com/ericlagergren/decimal" @@ -88,7 +89,7 @@ func CloneDynamicStringSliceOpt(in []*DynamicStringSliceOpt) (cl []*DynamicStrin for i, val := range in { cl[i] = &DynamicStringSliceOpt{ Tenant: val.Tenant, - FilterIDs: CloneStringSlice(val.FilterIDs), + FilterIDs: slices.Clone(val.FilterIDs), Value: val.Value, } } @@ -100,7 +101,7 @@ func CloneDynamicStringOpt(in []*DynamicStringOpt) (cl []*DynamicStringOpt) { for i, val := range in { cl[i] = &DynamicStringOpt{ Tenant: val.Tenant, - FilterIDs: CloneStringSlice(val.FilterIDs), + FilterIDs: slices.Clone(val.FilterIDs), Value: val.Value, } } @@ -112,7 +113,7 @@ func CloneDynamicInterfaceOpt(in []*DynamicInterfaceOpt) (cl []*DynamicInterface for i, val := range in { cl[i] = &DynamicInterfaceOpt{ Tenant: val.Tenant, - FilterIDs: CloneStringSlice(val.FilterIDs), + FilterIDs: slices.Clone(val.FilterIDs), Value: val.Value, } } @@ -124,7 +125,7 @@ func CloneDynamicBoolOpt(in []*DynamicBoolOpt) (cl []*DynamicBoolOpt) { for i, val := range in { cl[i] = &DynamicBoolOpt{ Tenant: val.Tenant, - FilterIDs: CloneStringSlice(val.FilterIDs), + FilterIDs: slices.Clone(val.FilterIDs), Value: val.Value, } } @@ -136,7 +137,7 @@ func CloneDynamicIntOpt(in []*DynamicIntOpt) (cl []*DynamicIntOpt) { for i, val := range in { cl[i] = &DynamicIntOpt{ Tenant: val.Tenant, - FilterIDs: CloneStringSlice(val.FilterIDs), + FilterIDs: slices.Clone(val.FilterIDs), Value: val.Value, } } @@ -148,7 +149,7 @@ func CloneDynamicFloat64Opt(in []*DynamicFloat64Opt) (cl []*DynamicFloat64Opt) { for i, val := range in { cl[i] = &DynamicFloat64Opt{ Tenant: val.Tenant, - FilterIDs: CloneStringSlice(val.FilterIDs), + FilterIDs: slices.Clone(val.FilterIDs), Value: val.Value, } } @@ -160,7 +161,7 @@ func CloneDynamicDurationOpt(in []*DynamicDurationOpt) (cl []*DynamicDurationOpt for i, val := range in { cl[i] = &DynamicDurationOpt{ Tenant: val.Tenant, - FilterIDs: CloneStringSlice(val.FilterIDs), + FilterIDs: slices.Clone(val.FilterIDs), Value: val.Value, } } @@ -172,7 +173,7 @@ func CloneDynamicDecimalBigOpt(in []*DynamicDecimalBigOpt) (cl []*DynamicDecimal for i, val := range in { cl[i] = &DynamicDecimalBigOpt{ Tenant: val.Tenant, - FilterIDs: CloneStringSlice(val.FilterIDs), + FilterIDs: slices.Clone(val.FilterIDs), Value: CloneDecimalBig(val.Value), } } @@ -184,7 +185,7 @@ func CloneDynamicIntPointerOpt(in []*DynamicIntPointerOpt) (cl []*DynamicIntPoin for i, val := range in { cl[i] = &DynamicIntPointerOpt{ Tenant: val.Tenant, - FilterIDs: CloneStringSlice(val.FilterIDs), + FilterIDs: slices.Clone(val.FilterIDs), Value: IntPointer(*val.Value), } } @@ -196,7 +197,7 @@ func CloneDynamicDurationPointerOpt(in []*DynamicDurationPointerOpt) (cl []*Dyna for i, val := range in { cl[i] = &DynamicDurationPointerOpt{ Tenant: val.Tenant, - FilterIDs: CloneStringSlice(val.FilterIDs), + FilterIDs: slices.Clone(val.FilterIDs), Value: DurationPointer(*val.Value), } } @@ -211,10 +212,10 @@ func DynamicStringSliceOptEqual(v1, v2 []*DynamicStringSliceOpt) bool { if v1[i].Tenant != v2[i].Tenant { return false } - if !SliceStringEqual(v1[i].FilterIDs, v2[i].FilterIDs) { + if !slices.Equal(v1[i].FilterIDs, v2[i].FilterIDs) { return false } - if !SliceStringEqual(v1[i].Value, v2[i].Value) { + if !slices.Equal(v1[i].Value, v2[i].Value) { return false } } @@ -229,7 +230,7 @@ func DynamicStringOptEqual(v1, v2 []*DynamicStringOpt) bool { if v1[i].Tenant != v2[i].Tenant { return false } - if !SliceStringEqual(v1[i].FilterIDs, v2[i].FilterIDs) { + if !slices.Equal(v1[i].FilterIDs, v2[i].FilterIDs) { return false } if v1[i].Value != v2[i].Value { @@ -247,7 +248,7 @@ func DynamicBoolOptEqual(v1, v2 []*DynamicBoolOpt) bool { if v1[i].Tenant != v2[i].Tenant { return false } - if !SliceStringEqual(v1[i].FilterIDs, v2[i].FilterIDs) { + if !slices.Equal(v1[i].FilterIDs, v2[i].FilterIDs) { return false } if v1[i].Value != v2[i].Value { @@ -265,7 +266,7 @@ func DynamicIntOptEqual(v1, v2 []*DynamicIntOpt) bool { if v1[i].Tenant != v2[i].Tenant { return false } - if !SliceStringEqual(v1[i].FilterIDs, v2[i].FilterIDs) { + if !slices.Equal(v1[i].FilterIDs, v2[i].FilterIDs) { return false } if v1[i].Value != v2[i].Value { @@ -283,7 +284,7 @@ func DynamicFloat64OptEqual(v1, v2 []*DynamicFloat64Opt) bool { if v1[i].Tenant != v2[i].Tenant { return false } - if !SliceStringEqual(v1[i].FilterIDs, v2[i].FilterIDs) { + if !slices.Equal(v1[i].FilterIDs, v2[i].FilterIDs) { return false } if v1[i].Value != v2[i].Value { @@ -301,7 +302,7 @@ func DynamicDurationOptEqual(v1, v2 []*DynamicDurationOpt) bool { if v1[i].Tenant != v2[i].Tenant { return false } - if !SliceStringEqual(v1[i].FilterIDs, v2[i].FilterIDs) { + if !slices.Equal(v1[i].FilterIDs, v2[i].FilterIDs) { return false } if v1[i].Value != v2[i].Value { @@ -319,7 +320,7 @@ func DynamicDecimalBigOptEqual(v1, v2 []*DynamicDecimalBigOpt) bool { if v1[i].Tenant != v2[i].Tenant { return false } - if !SliceStringEqual(v1[i].FilterIDs, v2[i].FilterIDs) || + if !slices.Equal(v1[i].FilterIDs, v2[i].FilterIDs) || v1[i].Value.Cmp(v2[i].Value) != 0 { return false } @@ -335,7 +336,7 @@ func DynamicInterfaceOptEqual(v1, v2 []*DynamicInterfaceOpt) bool { if v1[i].Tenant != v2[i].Tenant { return false } - if !SliceStringEqual(v1[i].FilterIDs, v2[i].FilterIDs) { + if !slices.Equal(v1[i].FilterIDs, v2[i].FilterIDs) { return false } if v1[i].Value != v2[i].Value { @@ -353,7 +354,7 @@ func DynamicIntPointerOptEqual(v1, v2 []*DynamicIntPointerOpt) bool { if v1[i].Tenant != v2[i].Tenant { return false } - if !SliceStringEqual(v1[i].FilterIDs, v2[i].FilterIDs) { + if !slices.Equal(v1[i].FilterIDs, v2[i].FilterIDs) { return false } if *v1[i].Value != *v2[i].Value { @@ -371,7 +372,7 @@ func DynamicDurationPointerOptEqual(v1, v2 []*DynamicDurationPointerOpt) bool { if v1[i].Tenant != v2[i].Tenant { return false } - if !SliceStringEqual(v1[i].FilterIDs, v2[i].FilterIDs) { + if !slices.Equal(v1[i].FilterIDs, v2[i].FilterIDs) { return false } if *v1[i].Value != *v2[i].Value { diff --git a/utils/map.go b/utils/map.go index 36429aed1..235906b8b 100644 --- a/utils/map.go +++ b/utils/map.go @@ -19,6 +19,7 @@ along with this program. If not, see package utils import ( + "slices" "strconv" "strings" ) @@ -105,7 +106,7 @@ func (fWp FlagParams) Clone() (cln FlagParams) { for flg, params := range fWp { var cprm []string if params != nil { - cprm = CloneStringSlice(params) + cprm = slices.Clone(params) } cln[flg] = cprm } diff --git a/utils/orderednavigablemap.go b/utils/orderednavigablemap.go index 1c7a022b8..f1b6eb3df 100644 --- a/utils/orderednavigablemap.go +++ b/utils/orderednavigablemap.go @@ -19,6 +19,7 @@ along with this program. If not, see package utils import ( + "slices" "strconv" "strings" ) @@ -85,7 +86,7 @@ func (onm *OrderedNavigableMap) Remove(fullPath *FullPath) (err error) { if fullPath.Path == EmptyString { return ErrWrongPath } - // fullPath.PathSlice = CloneStringSlice(fullPath.PathSlice) // clone the items to not modify the templates + // fullPath.PathSlice = slices.Clone(fullPath.PathSlice) // clone the items to not modify the templates if err = onm.nm.Remove(fullPath.PathSlice); err != nil { // remove them from DataNode return } @@ -130,7 +131,7 @@ func (onm *OrderedNavigableMap) SetAsSlice(fullPath *FullPath, vals []*DataNode) pathItmsSet := make([][]string, len(vals)) // prepare the path for order update for i := range vals { - pathItmsSet[i] = append(CloneStringSlice(fullPath.PathSlice), strconv.Itoa(i)) // clone the slice as we will append an index + pathItmsSet[i] = append(slices.Clone(fullPath.PathSlice), strconv.Itoa(i)) // clone the slice as we will append an index } path := stripIdxFromLastPathElm(fullPath.Path) if !addedNew { // cleanup old references since the value is being overwritten @@ -204,7 +205,7 @@ func (onm *OrderedNavigableMap) Append(fullPath *FullPath, val *DataLeaf) (err e // add the path to order onm.orderRef[fullPath.Path] = append(onm.orderRef[fullPath.Path], onm.orderIdx.PushBack( - append(CloneStringSlice(fullPath.PathSlice), // clone the slice as we will append an index + append(slices.Clone(fullPath.PathSlice), // clone the slice as we will append an index strconv.Itoa(idx)))) return } @@ -222,7 +223,7 @@ func (onm *OrderedNavigableMap) Compose(fullPath *FullPath, val *DataLeaf) (err if _, hasRef := onm.orderRef[fullPath.Path]; !hasRef { // the element is new so append to order onm.orderRef[fullPath.Path] = append(onm.orderRef[fullPath.Path], onm.orderIdx.PushBack( - append(CloneStringSlice(fullPath.PathSlice), // clone the slice as we will append an index + append(slices.Clone(fullPath.PathSlice), // clone the slice as we will append an index "0"))) } else { // move element in the back of order list onm.orderIdx.MoveToBack(onm.orderRef[fullPath.Path][len(onm.orderRef[fullPath.Path])-1]) diff --git a/utils/slice.go b/utils/slice.go index fd0612c96..c250eb8ac 100644 --- a/utils/slice.go +++ b/utils/slice.go @@ -19,23 +19,9 @@ along with this program. If not, see package utils import ( - "sort" "strings" ) -// Binary string search in slice -func IsSliceMember(ss []string, s string) bool { - sort.Strings(ss) - return SliceHasMember(ss, s) -} - -// SliceHasMember searches within a *sorted* slice -// useful to search in shared vars (no slice sort) -func SliceHasMember(ss []string, s string) bool { - i := sort.SearchStrings(ss, s) - return i < len(ss) && ss[i] == s -} - // PrefixSliceItems iterates through slice and add a prefix before every element func PrefixSliceItems(prfx string, slc []string) (out []string) { out = make([]string, 0, len(slc)) @@ -56,13 +42,6 @@ func SliceStringToIface(slc []string) (ifc []any) { return } -// Float64SliceHasMember searches within a *sorted* slice -// useful to search in shared vars (no slice sort) -func Float64SliceHasMember(ss []float64, s float64) bool { - i := sort.SearchFloat64s(ss, s) - return i < len(ss) && ss[i] == s -} - // HasPrefixSlice iterates over slice members and returns true if one the element has that prefix func HasPrefixSlice(prfxs []string, el string) bool { for _, prfx := range prfxs { @@ -72,23 +51,3 @@ func HasPrefixSlice(prfxs []string, el string) bool { } return false } - -func CloneStringSlice(in []string) (cl []string) { - if in != nil { - cl = make([]string, len(in)) - copy(cl, in) - } - return -} - -func SliceStringEqual(v1, v2 []string) bool { - if len(v1) != len(v2) { - return false - } - for i := range v1 { - if v1[i] != v2[i] { - return false - } - } - return true -} diff --git a/utils/slice_test.go b/utils/slice_test.go index 2fee66584..5a322baf4 100644 --- a/utils/slice_test.go +++ b/utils/slice_test.go @@ -23,33 +23,6 @@ import ( "testing" ) -func TestIsSliceMember(t *testing.T) { - if !IsSliceMember([]string{"1", "2", "3", "4", "5"}, "5") { - t.Error("Expecting: true, received: false") - } - if IsSliceMember([]string{"1", "2", "3", "4", "5"}, "6") { - t.Error("Expecting: true, received: false") - } -} - -func TestSliceHasMember(t *testing.T) { - if !SliceHasMember([]string{"1", "2", "3", "4", "5"}, "5") { - t.Error("Expecting: true, received: false") - } - if SliceHasMember([]string{"1", "2", "3", "4", "5"}, "6") { - t.Error("Expecting: true, received: false") - } -} - -func TestFlaot64SliceHasMember(t *testing.T) { - if !Float64SliceHasMember([]float64{1, 2, 3, 4, 5}, 5) { - t.Error("Expecting: true, received: false") - } - if Float64SliceHasMember([]float64{1, 2, 3, 4, 5}, 6) { - t.Error("Expecting: true, received: false") - } -} - func TestHasPrefixSlice(t *testing.T) { if !HasPrefixSlice([]string{"1", "2", "3", "4", "5"}, "123") { t.Error("Expecting: true, received: false") @@ -74,23 +47,3 @@ func TestSliceStringToIface(t *testing.T) { t.Errorf("Expected: %s ,received: %s", ToJSON(exp), ToJSON(rply)) } } - -func TestSliceStringEqual(t *testing.T) { - v1 := []string{"*V1field1", "*V1field2"} - v2 := []string{"*V2field1"} - - //When the length don't match - if rcv := SliceStringEqual(v1, v2); rcv { - t.Error("The length should not match") - } - - v2 = append(v2, "*V2field2") - if rcv := SliceStringEqual(v1, v2); rcv { - t.Error("The values should not match") - } - - v2 = v1 - if rcv := SliceStringEqual(v1, v2); !rcv { - t.Error("The slices should match") - } -}