From 9b1bc9189bcd20f74ad47d09fe00377ae0caec44 Mon Sep 17 00:00:00 2001 From: eatmoreapple Date: Fri, 23 Sep 2022 19:49:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=94=99=E8=AF=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client.go | 2 +- errors.go | 33 +++++++++++++++++++++++++++++++++ errors_test.go | 14 ++++++++++++++ items.go | 20 -------------------- 4 files changed, 48 insertions(+), 21 deletions(-) create mode 100644 errors.go create mode 100644 errors_test.go 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) - } - } -}