diff --git a/utils/errors.go b/utils/errors.go new file mode 100644 index 000000000..7e90be92c --- /dev/null +++ b/utils/errors.go @@ -0,0 +1,54 @@ +/* +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 utils + +// NewCGRError initialises a new CGRError +func NewCGRError(context, apiErr, shortErr, longErr string) *CGRError { + return &CGRError{context: context, apiError: apiErr, + shortError: shortErr, longError: longErr, errorMessage: shortErr} +} + +// CGRError is a context based error +// returns always errorMessage but this can be switched based on methods called on it +type CGRError struct { + context string + apiError string + shortError string + longError string + errorMessage string +} + +func (err *CGRError) Context() string { + return err.context +} + +func (err *CGRError) Error() string { + return err.errorMessage +} + +func (err *CGRError) ActivateAPIError() { + err.errorMessage = err.apiError +} + +func (err *CGRError) ActivateShortError() { + err.errorMessage = err.shortError +} + +func (err *CGRError) ActivateLongError() { + err.errorMessage = err.longError +} diff --git a/utils/errors_test.go b/utils/errors_test.go new file mode 100644 index 000000000..9b2247858 --- /dev/null +++ b/utils/errors_test.go @@ -0,0 +1,41 @@ +/* +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 utils + +import ( + "testing" +) + +func TestCGRErrorActivate(t *testing.T) { + ctx := "TEST_CONTEXT" + apiErr := "TEST_API_ERR" + shortErr := "short error" + longErr := "long error which is good for debug" + err := NewCGRError(ctx, apiErr, shortErr, longErr) + if err.Error() != shortErr { + t.Error(err) + } + err.ActivateAPIError() + if err.Error() != apiErr { + t.Error(err) + } + err.ActivateLongError() + if err.Error() != longErr { + t.Error(err) + } +}