| package client |
|
|
| import ( |
| "errors" |
| "fmt" |
| ) |
|
|
| type FailureKind string |
|
|
| const ( |
| FailureUnknown FailureKind = "" |
| FailureDirectUnauthorized FailureKind = "direct_unauthorized" |
| FailureManagedUnauthorized FailureKind = "managed_unauthorized" |
| ) |
|
|
| type RequestFailure struct { |
| Op string |
| Kind FailureKind |
| Message string |
| } |
|
|
| func (e *RequestFailure) Error() string { |
| if e == nil { |
| return "" |
| } |
| switch { |
| case e.Op != "" && e.Message != "": |
| return fmt.Sprintf("%s: %s", e.Op, e.Message) |
| case e.Op != "": |
| return e.Op + " failed" |
| case e.Message != "": |
| return e.Message |
| default: |
| return "request failed" |
| } |
| } |
|
|
| func IsManagedUnauthorizedError(err error) bool { |
| var failure *RequestFailure |
| return errors.As(err, &failure) && failure.Kind == FailureManagedUnauthorized |
| } |
|
|
| func IsDirectUnauthorizedError(err error) bool { |
| var failure *RequestFailure |
| return errors.As(err, &failure) && failure.Kind == FailureDirectUnauthorized |
| } |
|
|