Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4b55e33a49 |
+21
-2
@@ -5,7 +5,6 @@ package github
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
@@ -53,12 +52,32 @@ func asAPIError(err error) (*APIError, bool) {
|
||||
return nil, false
|
||||
}
|
||||
var target *APIError
|
||||
if errors.As(err, &target) {
|
||||
if ok := errorAs(err, &target); ok {
|
||||
return target, true
|
||||
}
|
||||
return nil, false
|
||||
}
|
||||
|
||||
// errorAs is a type-safe wrapper for errors.As to avoid import cycle issues.
|
||||
func errorAs(err error, target interface{}) bool {
|
||||
switch t := target.(type) {
|
||||
case **APIError:
|
||||
for err != nil {
|
||||
if e, ok := err.(*APIError); ok {
|
||||
*t = e
|
||||
return true
|
||||
}
|
||||
// Try unwrapping
|
||||
if u, ok := err.(interface{ Unwrap() error }); ok {
|
||||
err = u.Unwrap()
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// Client interacts with the GitHub API.
|
||||
// A Client is safe for concurrent use by multiple goroutines.
|
||||
type Client struct {
|
||||
|
||||
Reference in New Issue
Block a user