treasurer/internal/errors/errors.go

65 lines
1.4 KiB
Go
Raw Normal View History

2023-06-13 13:22:51 +00:00
package errors
import (
"errors"
"fmt"
)
type ErrorType error
var (
ErrInternalError ErrorType = errors.New("internal error")
ErrInvalidArgs ErrorType = errors.New("invalid arguments")
ErrMethodNotImplemented ErrorType = errors.New("method is not implemented")
ErrNotFound ErrorType = errors.New("record not found")
ErrNoAccess ErrorType = errors.New("no access")
ErrConflict ErrorType = errors.New("record already exist")
ErrInsufficientFunds ErrorType = errors.New("insufficient funds")
)
type Error interface {
Error() string
Type() ErrorType
Wrap(message string) Error
SetType(errorType ErrorType) Error
}
type customError struct {
errorType ErrorType
err error
}
func NewWithError(err error, errorType ErrorType) Error {
return &customError{
errorType: errorType,
err: err,
}
}
func NewWithMessage(message string, errorType ErrorType) Error {
return &customError{
errorType: errorType,
err: errors.New(message),
}
}
func (receiver *customError) Error() string {
return receiver.err.Error()
}
func (receiver *customError) Type() ErrorType {
return receiver.errorType
}
func (receiver *customError) Wrap(message string) Error {
receiver.err = fmt.Errorf("%s: %w", message, receiver.err)
return receiver
}
func (receiver *customError) SetType(errorType ErrorType) Error {
receiver.errorType = errorType
return receiver
}