package queue import "errors" type permanentError struct { err error } func (e permanentError) Error() string { return e.err.Error() } func (e permanentError) Unwrap() error { return e.err } type transientError struct { err error } func (e transientError) Error() string { return e.err.Error() } func (e transientError) Unwrap() error { return e.err } func Permanent(err error) error { if err == nil { return nil } return permanentError{err: err} } func Transient(err error) error { if err == nil { return nil } return transientError{err: err} } func IsPermanent(err error) bool { var target permanentError return errors.As(err, &target) } func IsTransient(err error) bool { var target transientError return errors.As(err, &target) }