Trait that provides an
ErrorKind and an error code.
ErrorKind when the error is modeled as retryable
If the error kind cannot be determined (e.g. the error is unmodeled at the error kind depends
on an HTTP status code, return
code for this error if one exists