diff --git a/client.go b/client.go index a4adfec..46d2d94 100644 --- a/client.go +++ b/client.go @@ -77,7 +77,7 @@ func (c *Client) do(req *http.Request) (*http.Response, error) { } resp, err := c.Client.Do(req) if err != nil { - err = NetworkErr{error: err} + err = ErrorWrapper(NetworkErr, err.Error()) } for _, hook := range c.HttpHooks { hook.AfterRequest(resp, err) diff --git a/errors.go b/errors.go new file mode 100644 index 0000000..a004358 --- /dev/null +++ b/errors.go @@ -0,0 +1,33 @@ +package openwechat + +import ( + "errors" +) + +type errorWrapper struct { + err error + msg string +} + +func (e errorWrapper) Unwrap() error { return e.err } + +func (e errorWrapper) Error() string { return e.msg } + +func ErrorWrapper(err error, msg string) error { + return &errorWrapper{msg: msg, err: err} +} + +var NetworkErr = errors.New("wechat network error") + +func IsNetworkError(err error) bool { + return errors.Is(err, NetworkErr) +} + +// IgnoreNetworkError 忽略网络请求的错误 +func IgnoreNetworkError(errHandler func(err error)) func(error) { + return func(err error) { + if !IsNetworkError(err) { + errHandler(err) + } + } +} diff --git a/errors_test.go b/errors_test.go new file mode 100644 index 0000000..cd4e2f6 --- /dev/null +++ b/errors_test.go @@ -0,0 +1,14 @@ +package openwechat + +import ( + "errors" + "testing" +) + +func TestIsNetworkError(t *testing.T) { + var err = errors.New("test error") + err = ErrorWrapper(NetworkErr, err.Error()) + if !IsNetworkError(err) { + t.Error("err is not network error") + } +} diff --git a/items.go b/items.go index 4f005ec..a5c8ce8 100644 --- a/items.go +++ b/items.go @@ -161,23 +161,3 @@ type PushLoginResponse struct { func (p PushLoginResponse) Ok() bool { return p.Ret == "0" && p.UUID != "" } - -type NetworkErr struct{ error } - -func (n NetworkErr) Unwrap() error { - return n.error -} - -func IsNetworkError(err error) bool { - _, ok := err.(NetworkErr) - return ok -} - -// IgnoreNetworkError 忽略网络请求的错误 -func IgnoreNetworkError(errHandler func(err error)) func(error) { - return func(err error) { - if !IsNetworkError(err) { - errHandler(err) - } - } -}