Compare commits

..

3 Commits
v1.0.0 ... main

Author SHA1 Message Date
6f60e54fd7 add At function 2025-08-11 23:05:16 +02:00
def7dda8d9 fix nil err 2025-08-07 15:56:29 +02:00
e9716a72e6 add IsSameAs method 2025-08-07 15:50:06 +02:00
2 changed files with 43 additions and 2 deletions

View File

@ -4,11 +4,15 @@ import (
"bytes"
"fmt"
"os"
"reflect"
"strings"
)
type Custom interface {
error
At(source any) Custom
With(innerErr ...error) Custom
IsSameAs(err error) bool
}
func NewCustom(message string, innerErr ...error) Custom {
@ -28,6 +32,20 @@ func (ex *custom) With(innerErr ...error) Custom {
return ex
}
func (ex *custom) At(source any) Custom {
if source != nil {
ex.message = fmt.Sprintf("%s in %s", ex.message, getType(source))
}
return ex
}
func (ex *custom) IsSameAs(err error) bool {
if err == nil {
return false
}
return strings.HasPrefix(err.Error(), fmt.Sprintf("[%s]:", ex.message))
}
func (ex *custom) Error() string {
buf := bytes.NewBufferString("")
if len(ex.innerErrors) > 0 {
@ -45,3 +63,14 @@ func getOsNewLine() string {
}
return "\r\n"
}
func getType[T any](source T) string {
typeName := ""
typeOf := reflect.TypeOf(source)
if typeOf != nil {
typeName = typeOf.String()
} else {
typeName = reflect.TypeOf((*T)(nil)).Elem().String()
}
return typeName
}

View File

@ -32,9 +32,21 @@ func (suite *CustomExceptionTestSuite) TestShouldAddInnerErrors() {
func (suite *CustomExceptionTestSuite) TestShouldAddInnerErrorsAfterCreation() {
ex := exception.NewCustom("fail")
ex.With(fmt.Errorf("innerError1"), fmt.Errorf("innerError2"))
ex.At(suite).With(fmt.Errorf("innerError1"), fmt.Errorf("innerError2"))
suite.NotNil(ex)
suite.Equal(ex.Error(), "[fail]:\ninnerError1\ninnerError2")
suite.Equal(ex.Error(), "[fail in *exception_test.CustomExceptionTestSuite]:\ninnerError1\ninnerError2")
}
func (suite *CustomExceptionTestSuite) TestShouldCompareExceptions() {
InvalidArgumentException := exception.NewCustom("InvalidArgumentException")
NotFoundException := exception.NewCustom("NotFoundException")
customErr := fmt.Errorf("something")
suite.True(InvalidArgumentException.IsSameAs(InvalidArgumentException))
suite.False(NotFoundException.IsSameAs(InvalidArgumentException))
suite.False(NotFoundException.IsSameAs(customErr))
suite.False(InvalidArgumentException.IsSameAs(customErr))
suite.False(InvalidArgumentException.IsSameAs(nil))
}
func TestCustomExceptionTestSuite(t *testing.T) {