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