mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-15 05:09:54 +05:00
Added IfaceAsTInt64
This commit is contained in:
committed by
Dan Christian Bogos
parent
98eb2be248
commit
173deee70b
@@ -272,7 +272,7 @@ func (me MapEvent) AsCDR(cfg *config.CGRConfig, tnt, tmz string) (cdr *CDR, err
|
||||
return nil, err
|
||||
}
|
||||
case utils.OrderID:
|
||||
if cdr.OrderID, err = utils.IfaceAsInt64(v); err != nil {
|
||||
if cdr.OrderID, err = utils.IfaceAsTInt64(v); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,6 +152,8 @@ func IfaceAsInt64(itm interface{}) (i int64, err error) {
|
||||
return int64(it), nil
|
||||
case time.Duration:
|
||||
return it.Nanoseconds(), nil
|
||||
case int32:
|
||||
return int64(it), nil
|
||||
case int64:
|
||||
return it, nil
|
||||
case string:
|
||||
@@ -162,6 +164,29 @@ func IfaceAsInt64(itm interface{}) (i int64, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// same function as IfaceAsInt64 but if the value is float round it to int64 instead of returning error
|
||||
func IfaceAsTInt64(itm interface{}) (i int64, err error) {
|
||||
switch it := itm.(type) {
|
||||
case int:
|
||||
return int64(it), nil
|
||||
case time.Duration:
|
||||
return it.Nanoseconds(), nil
|
||||
case int32:
|
||||
return int64(it), nil
|
||||
case int64:
|
||||
return it, nil
|
||||
case float32:
|
||||
return int64(it), nil
|
||||
case float64:
|
||||
return int64(it), nil
|
||||
case string:
|
||||
return strconv.ParseInt(it, 10, 64)
|
||||
default:
|
||||
err = fmt.Errorf("cannot convert field<%T>: %+v to int", it, it)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func IfaceAsFloat64(itm interface{}) (f float64, err error) {
|
||||
switch it := itm.(type) {
|
||||
case float64:
|
||||
|
||||
@@ -419,6 +419,56 @@ func TestIfaceAsInt64(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestIfaceAsTInt64(t *testing.T) {
|
||||
eInt := int64(3)
|
||||
val := interface{}(3)
|
||||
if itmConvert, err := IfaceAsTInt64(val); err != nil {
|
||||
t.Error(err)
|
||||
} else if itmConvert != eInt {
|
||||
t.Errorf("received: %+v", itmConvert)
|
||||
}
|
||||
val = interface{}(time.Duration(3))
|
||||
if itmConvert, err := IfaceAsTInt64(val); err != nil {
|
||||
t.Error(err)
|
||||
} else if itmConvert != eInt {
|
||||
t.Errorf("received: %+v", itmConvert)
|
||||
}
|
||||
val = interface{}("3")
|
||||
if itmConvert, err := IfaceAsTInt64(val); err != nil {
|
||||
t.Error(err)
|
||||
} else if itmConvert != eInt {
|
||||
t.Errorf("received: %+v", itmConvert)
|
||||
}
|
||||
val = interface{}(int64(3))
|
||||
if itmConvert, err := IfaceAsTInt64(val); err != nil {
|
||||
t.Error(err)
|
||||
} else if itmConvert != eInt {
|
||||
t.Errorf("received: %+v", itmConvert)
|
||||
}
|
||||
val = interface{}(int32(3))
|
||||
if itmConvert, err := IfaceAsTInt64(val); err != nil {
|
||||
t.Error(err)
|
||||
} else if itmConvert != eInt {
|
||||
t.Errorf("received: %+v", itmConvert)
|
||||
}
|
||||
val = interface{}(float32(3.14))
|
||||
if itmConvert, err := IfaceAsTInt64(val); err != nil {
|
||||
t.Error(err)
|
||||
} else if itmConvert != eInt {
|
||||
t.Errorf("received: %+v", itmConvert)
|
||||
}
|
||||
val = interface{}(float64(3.14))
|
||||
if itmConvert, err := IfaceAsTInt64(val); err != nil {
|
||||
t.Error(err)
|
||||
} else if itmConvert != eInt {
|
||||
t.Errorf("received: %+v", itmConvert)
|
||||
}
|
||||
val = interface{}("This is not an integer")
|
||||
if _, err := IfaceAsTInt64(val); err == nil {
|
||||
t.Error("expecting error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestIfaceAsBool(t *testing.T) {
|
||||
val := interface{}(true)
|
||||
if itmConvert, err := IfaceAsBool(val); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user