treasurer/internal/errors/errors.go

67 lines
1.4 KiB
Go
Raw Normal View History

2023-06-13 13:22:51 +00:00
package errors
import (
"errors"
"fmt"
)
2025-06-12 11:48:41 +00:00
// todo rework errors package
2023-06-13 13:22:51 +00:00
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),
}
}
2025-06-11 15:39:39 +00:00
func (e *customError) Error() string {
return e.err.Error()
2023-06-13 13:22:51 +00:00
}
2025-06-11 15:39:39 +00:00
func (e *customError) Type() ErrorType {
return e.errorType
2023-06-13 13:22:51 +00:00
}
2025-06-11 15:39:39 +00:00
func (e *customError) Wrap(message string) Error {
e.err = fmt.Errorf("%s: %w", message, e.err)
2023-06-13 13:22:51 +00:00
2025-06-11 15:39:39 +00:00
return e
2023-06-13 13:22:51 +00:00
}
2025-06-11 15:39:39 +00:00
func (e *customError) SetType(errorType ErrorType) Error {
e.errorType = errorType
2023-06-13 13:22:51 +00:00
2025-06-11 15:39:39 +00:00
return e
2023-06-13 13:22:51 +00:00
}