mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Replace CastFieldIfToString with IfaceAsString
This commit is contained in:
committed by
Dan Christian Bogos
parent
acc5925972
commit
1741cca805
@@ -143,7 +143,7 @@ func (da DiameterAgent) processCCR(ccr *CCR, reqProcessor *config.DARequestProce
|
||||
} else { // Query SessionS over APIs
|
||||
var tnt string
|
||||
if tntIf, has := smgEv[utils.Tenant]; has {
|
||||
if tntStr, canCast := utils.CastFieldIfToString(tntIf); canCast {
|
||||
if tntStr, err := utils.IfaceAsString(tntIf); err == nil {
|
||||
tnt = tntStr
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,12 +54,12 @@ type KamailioAgent struct {
|
||||
func (self *KamailioAgent) Connect() error {
|
||||
var err error
|
||||
eventHandlers := map[*regexp.Regexp][]func([]byte, string){
|
||||
regexp.MustCompile(CGR_AUTH_REQUEST): []func([]byte, string){
|
||||
regexp.MustCompile(CGR_AUTH_REQUEST): {
|
||||
self.onCgrAuth},
|
||||
regexp.MustCompile(CGR_CALL_START): []func([]byte, string){
|
||||
regexp.MustCompile(CGR_CALL_START): {
|
||||
self.onCallStart},
|
||||
regexp.MustCompile(CGR_CALL_END): []func([]byte, string){self.onCallEnd},
|
||||
regexp.MustCompile(CGR_DLG_LIST): []func([]byte, string){self.onDlgList},
|
||||
regexp.MustCompile(CGR_CALL_END): {self.onCallEnd},
|
||||
regexp.MustCompile(CGR_DLG_LIST): {self.onDlgList},
|
||||
}
|
||||
errChan := make(chan error)
|
||||
for _, connCfg := range self.cfg.EvapiConns {
|
||||
@@ -235,9 +235,18 @@ func (self *KamailioAgent) disconnectSession(connID string, dscEv *KamSessionDis
|
||||
|
||||
// Internal method to disconnect session in Kamailio
|
||||
func (ka *KamailioAgent) V1DisconnectSession(args utils.AttrDisconnectSession, reply *string) (err error) {
|
||||
hEntry, _ := utils.CastFieldIfToString(args.EventStart[KamHashEntry])
|
||||
hID, _ := utils.CastFieldIfToString(args.EventStart[KamHashID])
|
||||
connID, _ := utils.CastFieldIfToString(args.EventStart[EvapiConnID])
|
||||
hEntry, err := utils.IfaceAsString(args.EventStart[KamHashEntry])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
hID, err := utils.IfaceAsString(args.EventStart[KamHashID])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
connID, err := utils.IfaceAsString(args.EventStart[EvapiConnID])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err = ka.disconnectSession(connID,
|
||||
NewKamSessionDisconnect(hEntry, hID,
|
||||
utils.ErrInsufficientCredit.Error())); err != nil {
|
||||
|
||||
@@ -86,7 +86,7 @@ func (hU *httpUrlDP) FieldAsString(fldPath []string) (data string, err error) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
data, _ = utils.CastFieldIfToString(valIface)
|
||||
data, err = utils.IfaceAsString(valIface)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -136,7 +136,7 @@ func (hU *httpXmlDP) FieldAsInterface(fldPath []string) (data interface{}, err e
|
||||
}
|
||||
err = nil // cancel previous err
|
||||
var slctrStr string
|
||||
for i, _ := range fldPath {
|
||||
for i := range fldPath {
|
||||
if sIdx := strings.Index(fldPath[i], "["); sIdx != -1 {
|
||||
slctrStr = fldPath[i][sIdx:]
|
||||
if slctrStr[len(slctrStr)-1:] != "]" {
|
||||
@@ -172,7 +172,7 @@ func (hU *httpXmlDP) FieldAsString(fldPath []string) (data string, err error) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
data, _ = utils.CastFieldIfToString(valIface)
|
||||
data, err = utils.IfaceAsString(valIface)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -177,7 +177,7 @@ func (pk *radiusDP) FieldAsString(fldPath []string) (data string, err error) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
data, _ = utils.CastFieldIfToString(valIface)
|
||||
data, err = utils.IfaceAsString(valIface)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -263,7 +263,7 @@ func (cP *csvProvider) FieldAsString(fldPath []string) (data string, err error)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
data, _ = utils.CastFieldIfToString(valIface)
|
||||
data, err = utils.IfaceAsString(valIface)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -312,7 +312,7 @@ func (fP *fwvProvider) FieldAsString(fldPath []string) (data string, err error)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
data, _ = utils.CastFieldIfToString(valIface)
|
||||
data, err = utils.IfaceAsString(valIface)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -247,7 +247,7 @@ func (xP *xmlProvider) FieldAsString(fldPath []string) (data string, err error)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
data, _ = utils.CastFieldIfToString(valIface)
|
||||
data, err = utils.IfaceAsString(valIface)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -119,8 +119,7 @@ func (nM *NavigableMap) FieldAsString(fldPath []string) (fldVal string, err erro
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var canCast bool
|
||||
if fldVal, canCast = utils.CastFieldIfToString(valIface); !canCast {
|
||||
if fldVal, err = utils.IfaceAsString(valIface); err != nil {
|
||||
return "", fmt.Errorf("cannot cast field: %s to string", utils.ToJSON(valIface))
|
||||
}
|
||||
return
|
||||
@@ -243,8 +242,8 @@ func (nM *NavigableMap) AsXMLElements() (ents []*XMLElement, err error) {
|
||||
if nmItm.Config != nil && nmItm.Config.NewBranch {
|
||||
pathIdx = make(map[string]*XMLElement) // reset cache so we can start having other elements with same path
|
||||
}
|
||||
val, canCast := utils.CastFieldIfToString(nmItm.Data)
|
||||
if !canCast {
|
||||
val, err := utils.IfaceAsString(nmItm.Data)
|
||||
if err != nil {
|
||||
return nil,
|
||||
fmt.Errorf("cannot cast value: <%s> to string", utils.ToJSON(nmItm.Data))
|
||||
}
|
||||
|
||||
@@ -353,7 +353,7 @@ func disableAccountAction(acc *Account, sq *CDRStatsQueueTriggered, a *Action, a
|
||||
}*/
|
||||
|
||||
func genericReset(ub *Account) error {
|
||||
for k, _ := range ub.BalanceMap {
|
||||
for k := range ub.BalanceMap {
|
||||
ub.BalanceMap[k] = Balances{&Balance{Value: 0}}
|
||||
}
|
||||
ub.InitCounters()
|
||||
@@ -884,7 +884,7 @@ func (cdrP *cdrLogProvider) FieldAsString(fldPath []string) (data string, err er
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
data, _ = utils.CastFieldIfToString(valIface)
|
||||
data, err = utils.IfaceAsString(valIface)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -69,8 +69,8 @@ func matchingItemIDsForEvent(ev map[string]interface{}, stringFldIDs, prefixFldI
|
||||
continue
|
||||
}
|
||||
if _, cached := stringFieldVals[fldName]; !cached {
|
||||
strVal, canCast := utils.CastFieldIfToString(fieldValIf)
|
||||
if !canCast {
|
||||
strVal, err := utils.IfaceAsString(fieldValIf)
|
||||
if err != nil {
|
||||
utils.Logger.Warning(
|
||||
fmt.Sprintf("<%s> cannot cast field: %s into string", utils.FilterS, fldName))
|
||||
continue
|
||||
|
||||
@@ -126,7 +126,7 @@ func (cP *csvProvider) FieldAsString(fldPath []string) (data string, err error)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
data, _ = utils.CastFieldIfToString(valIface)
|
||||
data, err = utils.IfaceAsString(valIface)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -54,8 +54,8 @@ func (ev *CGREvent) FieldAsString(fldName string) (val string, err error) {
|
||||
if !has {
|
||||
return "", ErrNotFound
|
||||
}
|
||||
val, canCast := CastFieldIfToString(iface)
|
||||
if !canCast {
|
||||
val, err = IfaceAsString(iface)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("cannot cast %s to string", fldName)
|
||||
}
|
||||
return val, nil
|
||||
|
||||
@@ -37,9 +37,8 @@ func (dcs DataConverters) ConvertString(in string) (out string, err error) {
|
||||
return
|
||||
}
|
||||
}
|
||||
var canCast bool
|
||||
out, canCast = CastFieldIfToString(outIface)
|
||||
if !canCast {
|
||||
out, err = IfaceAsString(outIface)
|
||||
if err != nil {
|
||||
return "", NewErrStringCast(outIface)
|
||||
}
|
||||
return
|
||||
|
||||
@@ -26,43 +26,6 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
func CastFieldIfToString(fld interface{}) (string, bool) {
|
||||
if fld == nil {
|
||||
return "", true
|
||||
}
|
||||
var strVal string
|
||||
var converted bool
|
||||
switch fld.(type) {
|
||||
case int:
|
||||
strVal = strconv.Itoa(fld.(int))
|
||||
converted = true
|
||||
case int64:
|
||||
strVal = strconv.FormatInt(fld.(int64), 10)
|
||||
converted = true
|
||||
case bool:
|
||||
strVal = strconv.FormatBool(fld.(bool))
|
||||
converted = true
|
||||
case float64:
|
||||
strVal = strconv.FormatFloat(fld.(float64), 'f', -1, 64)
|
||||
converted = true
|
||||
case []uint8:
|
||||
var byteVal []byte
|
||||
if byteVal, converted = fld.([]byte); converted {
|
||||
strVal = string(byteVal)
|
||||
}
|
||||
case time.Duration:
|
||||
strVal = fld.(time.Duration).String()
|
||||
converted = true
|
||||
case string:
|
||||
strVal = fld.(string)
|
||||
converted = true
|
||||
default: // Maybe we are lucky and the value converts to string
|
||||
strVal = ToJSON(fld)
|
||||
converted = true
|
||||
}
|
||||
return strVal, converted
|
||||
}
|
||||
|
||||
// StringToInterface will parse string into supported types
|
||||
// if no other conversion possible, original string will be returned
|
||||
func StringToInterface(s string) interface{} {
|
||||
@@ -142,12 +105,11 @@ func ReflectFieldAsString(intf interface{}, fldName, extraFieldsLabel string) (s
|
||||
case reflect.Float64:
|
||||
return strconv.FormatFloat(vOf.Float(), 'f', -1, 64), nil
|
||||
case reflect.Interface:
|
||||
strVal, converted := CastFieldIfToString(field)
|
||||
if !converted {
|
||||
strVal, err := IfaceAsString(field)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("Cannot convert to string field type: %s", vOf.Kind().String())
|
||||
} else {
|
||||
return strVal, nil
|
||||
}
|
||||
return strVal, nil
|
||||
default:
|
||||
return "", fmt.Errorf("Cannot convert to string field type: %s", vOf.Kind().String())
|
||||
}
|
||||
|
||||
@@ -223,30 +223,40 @@ func TestStringToInterface(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestCastFieldIfToString(t *testing.T) {
|
||||
func TestIfaceAsString(t *testing.T) {
|
||||
val := interface{}("string1")
|
||||
if resVal, converted := CastFieldIfToString(val); !converted || resVal != "string1" {
|
||||
t.Error(resVal, converted)
|
||||
if rply, err := IfaceAsString(val); err != nil {
|
||||
t.Error(err)
|
||||
} else if rply != "string1" {
|
||||
t.Errorf("Expeced string1 ,recived %+v", rply)
|
||||
}
|
||||
val = interface{}(123)
|
||||
if resVal, converted := CastFieldIfToString(val); !converted || resVal != "123" {
|
||||
t.Error(resVal, converted)
|
||||
if rply, err := IfaceAsString(val); err != nil {
|
||||
t.Error(err)
|
||||
} else if rply != "123" {
|
||||
t.Errorf("Expeced 123 ,recived %+v", rply)
|
||||
}
|
||||
val = interface{}([]byte("byte_val"))
|
||||
if resVal, converted := CastFieldIfToString(val); !converted || resVal != "byte_val" {
|
||||
t.Error(resVal, converted)
|
||||
if rply, err := IfaceAsString(val); err != nil {
|
||||
t.Error(err)
|
||||
} else if rply != "byte_val" {
|
||||
t.Errorf("Expeced byte_val ,recived %+v", rply)
|
||||
}
|
||||
val = interface{}(true)
|
||||
if resVal, converted := CastFieldIfToString(val); !converted || resVal != "true" {
|
||||
t.Error(resVal, converted)
|
||||
if rply, err := IfaceAsString(val); err != nil {
|
||||
t.Error(err)
|
||||
} else if rply != "true" {
|
||||
t.Errorf("Expeced true ,recived %+v", rply)
|
||||
}
|
||||
if strVal, cast := CastFieldIfToString(time.Duration(1 * time.Second)); !cast {
|
||||
t.Error("cannot cast time.Duration")
|
||||
} else if strVal != "1s" {
|
||||
t.Errorf("received: %s", strVal)
|
||||
if rply, err := IfaceAsString(time.Duration(1 * time.Second)); err != nil {
|
||||
t.Error(err)
|
||||
} else if rply != "1s" {
|
||||
t.Errorf("Expeced 1s ,recived %+v", rply)
|
||||
}
|
||||
if resVal, converted := CastIfToString(nil); converted || resVal != "" {
|
||||
t.Errorf("received: %s", resVal)
|
||||
if rply, err := IfaceAsString(nil); err != nil {
|
||||
t.Error(err)
|
||||
} else if rply != "" {
|
||||
t.Errorf("Expeced ,recived %+v", rply)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -288,7 +288,7 @@ func UpdateStructWithIfaceMap(s interface{}, mp map[string]interface{}) (err err
|
||||
fld.SetFloat(valFlt)
|
||||
}
|
||||
case reflect.String:
|
||||
if valStr, canCast := CastFieldIfToString(val); !canCast {
|
||||
if valStr, err := IfaceAsString(val); err != nil {
|
||||
return fmt.Errorf("cannot convert field: %+v to string", val)
|
||||
} else {
|
||||
fld.SetString(valStr)
|
||||
|
||||
Reference in New Issue
Block a user