package domain type ErrorCode uint8 const ( ErrorCodeUnknown ErrorCode = iota ErrorCodeNotFound ErrorCodeIncorrectInput ) func (e ErrorCode) String() string { switch e { case ErrorCodeNotFound: return "not-found" case ErrorCodeIncorrectInput: return "incorrect-input" case ErrorCodeUnknown: fallthrough default: return "unknown-error" } } type Error interface { error Code() ErrorCode Slug() string } type ErrorWithParams interface { Error Params() map[string]any } type simpleError struct { msg string code ErrorCode slug string } var _ Error = simpleError{} func (e simpleError) Error() string { return e.msg } func (e simpleError) Code() ErrorCode { return e.code } func (e simpleError) Slug() string { return e.slug }