treasurer/internal/errors/errors.go

65 lines
1.3 KiB
Go

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 (e *customError) Error() string {
return e.err.Error()
}
func (e *customError) Type() ErrorType {
return e.errorType
}
func (e *customError) Wrap(message string) Error {
e.err = fmt.Errorf("%s: %w", message, e.err)
return e
}
func (e *customError) SetType(errorType ErrorType) Error {
e.errorType = errorType
return e
}