diff --git a/utils/cgrevent.go b/utils/cgrevent.go
index 1465ffb71..a8ae185a9 100644
--- a/utils/cgrevent.go
+++ b/utils/cgrevent.go
@@ -19,9 +19,7 @@ along with this program. If not, see
package utils
import (
- "fmt"
"reflect"
- "strconv"
"strings"
"time"
)
@@ -54,11 +52,7 @@ func (ev *CGREvent) FieldAsString(fldName string) (val string, err error) {
if !has {
return "", ErrNotFound
}
- val, err = IfaceAsString(iface)
- if err != nil {
- return "", fmt.Errorf("cannot cast %s to string", fldName)
- }
- return val, nil
+ return IfaceAsString(iface)
}
// FieldAsTime returns a field as Time instance
@@ -68,16 +62,7 @@ func (ev *CGREvent) FieldAsTime(fldName string, timezone string) (t time.Time, e
err = ErrNotFound
return
}
- var canCast bool
- if t, canCast = iface.(time.Time); canCast {
- return
- }
- s, canCast := iface.(string)
- if !canCast {
- err = fmt.Errorf("cannot cast %s to string", fldName)
- return
- }
- return ParseTimeDetectLayout(s, timezone)
+ return IfaceAsTime(iface, timezone)
}
// FieldAsDuration returns a field as Duration instance
@@ -87,19 +72,7 @@ func (ev *CGREvent) FieldAsDuration(fldName string) (d time.Duration, err error)
err = ErrNotFound
return
}
- var canCast bool
- if d, canCast = iface.(time.Duration); canCast {
- return
- }
- if f, canCast := iface.(float64); canCast {
- return time.Duration(int64(f)), nil
- }
- s, canCast := iface.(string)
- if !canCast {
- err = fmt.Errorf("cannot cast %s to string", fldName)
- return
- }
- return ParseDurationWithNanosecs(s)
+ return IfaceAsDuration(iface)
}
// FieldAsFloat64 returns a field as float64 instance
@@ -108,15 +81,7 @@ func (ev *CGREvent) FieldAsFloat64(fldName string) (f float64, err error) {
if !has {
return f, ErrNotFound
}
- if val, canCast := iface.(float64); canCast {
- return val, nil
- }
- csStr, canCast := iface.(string)
- if !canCast {
- err = fmt.Errorf("cannot cast %s to string", fldName)
- return
- }
- return strconv.ParseFloat(csStr, 64)
+ return IfaceAsFloat64(iface)
}
func (ev *CGREvent) TenantID() string {
diff --git a/utils/cgrevent_test.go b/utils/cgrevent_test.go
index 41f5ea832..55ee6a9c3 100644
--- a/utils/cgrevent_test.go
+++ b/utils/cgrevent_test.go
@@ -18,8 +18,8 @@ along with this program. If not, see
package utils
import (
- "fmt"
"reflect"
+ "strings"
"testing"
"time"
)
@@ -118,7 +118,6 @@ func TestCGREventFieldAsString(t *testing.T) {
}
func TestCGREventFieldAsFloat64(t *testing.T) {
- err1 := fmt.Errorf("cannot cast %s to string", AnswerTime)
se := &CGREvent{
Tenant: "cgrates.org",
ID: "supplierEvent1",
@@ -154,12 +153,8 @@ func TestCGREventFieldAsFloat64(t *testing.T) {
t.Errorf("Expecting: %+v, received: %+v", 0, answ)
}
- answ, err = se.FieldAsFloat64(AnswerTime)
- if !reflect.DeepEqual(err, err1) {
- t.Error(err)
- }
- if answ != 0 {
- t.Errorf("Expecting: %+v, received: %+v", 0, answ)
+ if _, err := se.FieldAsFloat64(AnswerTime); err == nil || !strings.HasPrefix(err.Error(), "cannot convert field") {
+ t.Errorf("Unexpected error : %+v", err)
}
}
func TestCGREventClone(t *testing.T) {