| 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 | |
| } | |