diff --git a/README.md b/README.md index 3ab395e620591deb943acdec6909890cc9c5e130..f6afbd8c7f4e7f296b770f67aee62e176840370d 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,9 @@ go get nhooyr.io/websocket For a production quality example that shows off the full API, see the [echo example on the godoc](https://godoc.org/nhooyr.io/websocket#example-package--Echo). On github, the example is at [example_echo_test.go](./example_echo_test.go). -Use the [errors.As](https://golang.org/pkg/errors/#As) function [new in Go 1.13](https://golang.org/doc/go1.13#error_wrapping) to check for [websocket.CloseError](https://godoc.org/nhooyr.io/websocket#CloseError). See the [CloseError godoc example](https://godoc.org/nhooyr.io/websocket#example-CloseError). +Use the [errors.As](https://golang.org/pkg/errors/#As) function [new in Go 1.13](https://golang.org/doc/go1.13#error_wrapping) to check for [websocket.CloseError](https://godoc.org/nhooyr.io/websocket#CloseError). +There is also [websocket.CloseStatus](https://godoc.org/nhooyr.io/websocket#CloseStatus) to quickly grab the close status code out of a [websocket.CloseError](https://godoc.org/nhooyr.io/websocket#CloseError). +See the [CloseError godoc example](https://godoc.org/nhooyr.io/websocket#example-CloseError). ### Server diff --git a/conn_test.go b/conn_test.go index 6ef77829b904531bccd4cfb14ffd67dd5ad683fe..0e012bf7bdb3e7c745a907f868a4a0859cd764f9 100644 --- a/conn_test.go +++ b/conn_test.go @@ -586,8 +586,8 @@ func TestConn(t *testing.T) { return err } _, _, err = c.Read(ctx) - cerr := &websocket.CloseError{} - if !errors.As(err, cerr) || cerr.Code != websocket.StatusProtocolError { + var cerr websocket.CloseError + if !errors.As(err, &cerr) || cerr.Code != websocket.StatusProtocolError { return fmt.Errorf("expected close error with StatusProtocolError: %+v", err) } return nil diff --git a/doc.go b/doc.go index a17bfb05f7438956789413d57c3e839ba37ad2a9..1610eed1e33b8bb0264e92f190409a70d196c388 100644 --- a/doc.go +++ b/doc.go @@ -16,6 +16,7 @@ // comparison with existing implementations. // // Use the errors.As function new in Go 1.13 to check for websocket.CloseError. +// Or use the CloseStatus function to grab the StatusCode out of a websocket.CloseError // See the CloseError example. // // Wasm diff --git a/example_test.go b/example_test.go index 2cedddf384e3b37931670ecf5e79cde470471a31..1cb3d799910ddab411f697ae2d009bd72766afc6 100644 --- a/example_test.go +++ b/example_test.go @@ -4,7 +4,6 @@ package websocket_test import ( "context" - "errors" "log" "net/http" "time" @@ -76,8 +75,7 @@ func ExampleCloseError() { defer c.Close(websocket.StatusInternalError, "the sky is falling") _, _, err = c.Reader(ctx) - var cerr websocket.CloseError - if !errors.As(err, &cerr) || cerr.Code != websocket.StatusNormalClosure { + if websocket.CloseStatus(err) != websocket.StatusNormalClosure { log.Fatalf("expected to be disconnected with StatusNormalClosure but got: %+v", err) return } diff --git a/frame.go b/frame.go index 796c1c85d57afe5ae1f68905b190897d6f53a41d..b5301d782d4e61f74dfae302c0315c8ddaafba98 100644 --- a/frame.go +++ b/frame.go @@ -253,11 +253,11 @@ func (ce CloseError) Error() string { return fmt.Sprintf("status = %v and reason = %q", ce.Code, ce.Reason) } -// CloseStatus is a convenience wrapper around xerrors.As to grab +// CloseStatus is a convenience wrapper around errors.As to grab // the status code from a *CloseError. If the passed error is nil // or not a *CloseError, the returned StatusCode will be -1. func CloseStatus(err error) StatusCode { - var ce *CloseError + var ce CloseError if errors.As(err, &ce) { return ce.Code } diff --git a/frame_test.go b/frame_test.go index a4fead4937f576d37cfc6f2e1c13c9448b304671..8c5760e8db8835283b65ac6fed60f12fda74eb44 100644 --- a/frame_test.go +++ b/frame_test.go @@ -399,7 +399,7 @@ func TestCloseStatus(t *testing.T) { }, { name: "StatusInternalError", - in: &CloseError{ + in: CloseError{ Code: StatusInternalError, }, exp: StatusInternalError,