mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-16 05:39:54 +05:00
New DataConverter *multiply
This commit is contained in:
@@ -537,6 +537,8 @@ const (
|
||||
Opensips = "opensips"
|
||||
Asterisk = "asterisk"
|
||||
SchedulerS = "SchedulerS"
|
||||
MetaMultiply = "*multiply"
|
||||
MetaDivide = "*divide"
|
||||
)
|
||||
|
||||
// Migrator Action
|
||||
|
||||
@@ -61,6 +61,11 @@ func NewDataConverter(params string) (
|
||||
return NewRoundConverter("")
|
||||
}
|
||||
return NewRoundConverter(params[len(MetaRound)+1:])
|
||||
case strings.HasPrefix(params, MetaMultiply):
|
||||
if len(params) == len(MetaMultiply) { // no extra params, defaults implied
|
||||
return NewMultiplyConverter("")
|
||||
}
|
||||
return NewMultiplyConverter(params[len(MetaMultiply)+1:])
|
||||
default:
|
||||
return nil,
|
||||
fmt.Errorf("unsupported converter definition: <%s>",
|
||||
@@ -126,3 +131,31 @@ func (rnd *RoundConverter) Convert(in interface{}) (
|
||||
out = Round(inFloat, rnd.Decimals, rnd.Method)
|
||||
return
|
||||
}
|
||||
|
||||
func NewMultiplyConverter(constructParams string) (
|
||||
hdlr DataConverter, err error) {
|
||||
if constructParams == "" {
|
||||
return nil, ErrMandatoryIeMissingNoCaps
|
||||
}
|
||||
var val float64
|
||||
if val, err = strconv.ParseFloat(constructParams, 64); err != nil {
|
||||
return
|
||||
}
|
||||
return &MultiplyConverter{Value: val}, nil
|
||||
}
|
||||
|
||||
// MultiplyConverter multiplies input with value in params
|
||||
// encapsulates the output as float64 value
|
||||
type MultiplyConverter struct {
|
||||
Value float64
|
||||
}
|
||||
|
||||
func (m *MultiplyConverter) Convert(in interface{}) (
|
||||
out interface{}, err error) {
|
||||
var inFloat64 float64
|
||||
if inFloat64, err = IfaceAsFloat64(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out = inFloat64 * m.Value
|
||||
return
|
||||
}
|
||||
|
||||
@@ -141,3 +141,25 @@ func TestRoundConverterTime(t *testing.T) {
|
||||
t.Errorf("Expected %+v received: %+v", expV, val)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMultiplyConverter(t *testing.T) {
|
||||
eMpl := &MultiplyConverter{1024.0}
|
||||
m, err := NewMultiplyConverter("1024.0")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(eMpl, m) {
|
||||
t.Errorf("expecting: %+v, received: %+v", eMpl, m)
|
||||
}
|
||||
expOut := 2048.0
|
||||
if out, err := m.Convert(time.Duration(2)); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(expOut, out) {
|
||||
t.Errorf("expecting: %+v, received: %+v", expOut, out)
|
||||
}
|
||||
expOut = 1536.0
|
||||
if out, err := m.Convert(1.5); err != nil {
|
||||
t.Error(err)
|
||||
} else if !reflect.DeepEqual(expOut, out) {
|
||||
t.Errorf("expecting: %+v, received: %+v", expOut, out)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,34 +24,35 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
ErrNoMoreData = errors.New("NO_MORE_DATA")
|
||||
ErrNotImplemented = errors.New("NOT_IMPLEMENTED")
|
||||
ErrNotFound = errors.New("NOT_FOUND")
|
||||
ErrTimedOut = errors.New("TIMED_OUT")
|
||||
ErrServerError = errors.New("SERVER_ERROR")
|
||||
ErrMaxRecursionDepth = errors.New("MAX_RECURSION_DEPTH")
|
||||
ErrMandatoryIeMissing = errors.New("MANDATORY_IE_MISSING")
|
||||
ErrExists = errors.New("EXISTS")
|
||||
ErrBrokenReference = errors.New("BROKEN_REFERENCE")
|
||||
ErrParserError = errors.New("PARSER_ERROR")
|
||||
ErrInvalidPath = errors.New("INVALID_PATH")
|
||||
ErrInvalidKey = errors.New("INVALID_KEY")
|
||||
ErrUnauthorizedDestination = errors.New("UNAUTHORIZED_DESTINATION")
|
||||
ErrRatingPlanNotFound = errors.New("RATING_PLAN_NOT_FOUND")
|
||||
ErrAccountNotFound = errors.New("ACCOUNT_NOT_FOUND")
|
||||
ErrAccountDisabled = errors.New("ACCOUNT_DISABLED")
|
||||
ErrUserNotFound = errors.New("USER_NOT_FOUND")
|
||||
ErrInsufficientCredit = errors.New("INSUFFICIENT_CREDIT")
|
||||
ErrNotConvertible = errors.New("NOT_CONVERTIBLE")
|
||||
ErrResourceUnavailable = errors.New("RESOURCE_UNAVAILABLE")
|
||||
ErrResourceUnauthorized = errors.New("RESOURCE_UNAUTHORIZED")
|
||||
ErrNoActiveSession = errors.New("NO_ACTIVE_SESSION")
|
||||
ErrPartiallyExecuted = errors.New("PARTIALLY_EXECUTED")
|
||||
ErrMaxUsageExceeded = errors.New("MAX_USAGE_EXCEEDED")
|
||||
ErrUnallocatedResource = errors.New("UNALLOCATED_RESOURCE")
|
||||
ErrNotFoundNoCaps = errors.New("not found")
|
||||
ErrFilterNotPassingNoCaps = errors.New("filter not passing")
|
||||
ErrNotConvertibleNoCaps = errors.New("not convertible")
|
||||
ErrNoMoreData = errors.New("NO_MORE_DATA")
|
||||
ErrNotImplemented = errors.New("NOT_IMPLEMENTED")
|
||||
ErrNotFound = errors.New("NOT_FOUND")
|
||||
ErrTimedOut = errors.New("TIMED_OUT")
|
||||
ErrServerError = errors.New("SERVER_ERROR")
|
||||
ErrMaxRecursionDepth = errors.New("MAX_RECURSION_DEPTH")
|
||||
ErrMandatoryIeMissing = errors.New("MANDATORY_IE_MISSING")
|
||||
ErrExists = errors.New("EXISTS")
|
||||
ErrBrokenReference = errors.New("BROKEN_REFERENCE")
|
||||
ErrParserError = errors.New("PARSER_ERROR")
|
||||
ErrInvalidPath = errors.New("INVALID_PATH")
|
||||
ErrInvalidKey = errors.New("INVALID_KEY")
|
||||
ErrUnauthorizedDestination = errors.New("UNAUTHORIZED_DESTINATION")
|
||||
ErrRatingPlanNotFound = errors.New("RATING_PLAN_NOT_FOUND")
|
||||
ErrAccountNotFound = errors.New("ACCOUNT_NOT_FOUND")
|
||||
ErrAccountDisabled = errors.New("ACCOUNT_DISABLED")
|
||||
ErrUserNotFound = errors.New("USER_NOT_FOUND")
|
||||
ErrInsufficientCredit = errors.New("INSUFFICIENT_CREDIT")
|
||||
ErrNotConvertible = errors.New("NOT_CONVERTIBLE")
|
||||
ErrResourceUnavailable = errors.New("RESOURCE_UNAVAILABLE")
|
||||
ErrResourceUnauthorized = errors.New("RESOURCE_UNAUTHORIZED")
|
||||
ErrNoActiveSession = errors.New("NO_ACTIVE_SESSION")
|
||||
ErrPartiallyExecuted = errors.New("PARTIALLY_EXECUTED")
|
||||
ErrMaxUsageExceeded = errors.New("MAX_USAGE_EXCEEDED")
|
||||
ErrUnallocatedResource = errors.New("UNALLOCATED_RESOURCE")
|
||||
ErrNotFoundNoCaps = errors.New("not found")
|
||||
ErrFilterNotPassingNoCaps = errors.New("filter not passing")
|
||||
ErrNotConvertibleNoCaps = errors.New("not convertible")
|
||||
ErrMandatoryIeMissingNoCaps = errors.New("mandatory information missing")
|
||||
)
|
||||
|
||||
// NewCGRError initialises a new CGRError
|
||||
|
||||
Reference in New Issue
Block a user