/* Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments Copyright (C) ITsysCOM GmbH This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see */ package engine import ( "sort" "github.com/cgrates/cgrates/utils" ) // ChargerProfile is the config for one Charger type ChargerProfile struct { Tenant string ID string FilterIDs []string RunID string AttributeIDs []string // perform data aliasing based on these Attributes Weight float64 } // ChargerProfileWithAPIOpts is used in replicatorV1 for dispatcher type ChargerProfileWithAPIOpts struct { *ChargerProfile APIOpts map[string]interface{} } func (cP *ChargerProfile) TenantID() string { return utils.ConcatenatedKey(cP.Tenant, cP.ID) } // ChargerProfiles is a sortable list of Charger profiles type ChargerProfiles []*ChargerProfile // Sort is part of sort interface, sort based on Weight func (cps ChargerProfiles) Sort() { sort.Slice(cps, func(i, j int) bool { return cps[i].Weight > cps[j].Weight }) } func (cp *ChargerProfile) Set(path []string, val interface{}, newBranch bool, _ string) (err error) { if len(path) != 1 { return utils.ErrWrongPath } switch path[0] { default: return utils.ErrWrongPath case utils.Tenant: cp.Tenant = utils.IfaceAsString(val) case utils.ID: cp.ID = utils.IfaceAsString(val) case utils.FilterIDs: var valA []string valA, err = utils.IfaceAsStringSlice(val) cp.FilterIDs = append(cp.FilterIDs, valA...) case utils.RunID: cp.RunID = utils.IfaceAsString(val) case utils.AttributeIDs: var valA []string valA, err = utils.IfaceAsStringSlice(val) cp.AttributeIDs = append(cp.AttributeIDs, valA...) case utils.Weight: cp.Weight, err = utils.IfaceAsFloat64(val) } return }