From 36b86626f100b4bcf16203e1e6e034f4f945d716 Mon Sep 17 00:00:00 2001 From: Waldemar Quevedo Date: Mon, 22 Aug 2022 11:14:19 -0700 Subject: [PATCH] js: switch to APIError Signed-off-by: Waldemar Quevedo --- jsm.go | 32 ++++++++++++++++---------------- nats.go | 4 ++-- test/js_test.go | 8 ++++---- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/jsm.go b/jsm.go index 9bb7a7909..b4b29c92b 100644 --- a/jsm.go +++ b/jsm.go @@ -154,22 +154,22 @@ type ExternalStream struct { DeliverPrefix string `json:"deliver"` } -// JetStreamAPIError is included in all API responses if there was an error. -type JetStreamAPIError struct { +// APIError is included in all API responses if there was an error. +type APIError struct { Code int `json:"code"` ErrorCode ErrorCode `json:"err_code"` Description string `json:"description,omitempty"` } // Error prints the JetStream API error code and description -func (e *JetStreamAPIError) Error() string { +func (e *APIError) Error() string { return fmt.Sprintf("nats: API error %d: %s", e.ErrorCode, e.Description) } -// Is matches against an JetStreamAPIError. -func (e *JetStreamAPIError) Is(err error) bool { +// Is matches against an APIError. +func (e *APIError) Is(err error) bool { // Extract internal APIError to match against. - var aerr *JetStreamAPIError + var aerr *APIError ok := errors.As(err, &aerr) if !ok { return ok @@ -179,16 +179,16 @@ func (e *JetStreamAPIError) Is(err error) bool { // JetStreamError is an error result that happens when using JetStream. type JetStreamError interface { - APIError() *JetStreamAPIError + APIError() *APIError error } type jsError struct { - apiErr *JetStreamAPIError + apiErr *APIError message string } -func (err *jsError) APIError() *JetStreamAPIError { +func (err *jsError) APIError() *APIError { return err.apiErr } @@ -206,8 +206,8 @@ func (err *jsError) Unwrap() error { // apiResponse is a standard response from the JetStream JSON API type apiResponse struct { - Type string `json:"type"` - Error *JetStreamAPIError `json:"error,omitempty"` + Type string `json:"type"` + Error *APIError `json:"error,omitempty"` } // apiPaged includes variables used to create paged responses from the JSON API @@ -803,11 +803,11 @@ type StreamInfo struct { // StreamSourceInfo shows information about an upstream stream source. type StreamSourceInfo struct { - Name string `json:"name"` - Lag uint64 `json:"lag"` - Active time.Duration `json:"active"` - External *ExternalStream `json:"external"` - Error *JetStreamAPIError `json:"error"` + Name string `json:"name"` + Lag uint64 `json:"lag"` + Active time.Duration `json:"active"` + External *ExternalStream `json:"external"` + Error *APIError `json:"error"` } // StreamState is information about the given stream. diff --git a/nats.go b/nats.go index 7c9264c1f..f3ecdc4e8 100644 --- a/nats.go +++ b/nats.go @@ -172,10 +172,10 @@ var ( var ( // ErrJetStreamNotEnabled is an error returned when JetStream is not enabled for an account. - ErrJetStreamNotEnabled JetStreamError = &jsError{apiErr: &JetStreamAPIError{ErrorCode: JSErrCodeJetStreamNotEnabled, Description: "jetstream not enabled"}} + ErrJetStreamNotEnabled JetStreamError = &jsError{apiErr: &APIError{ErrorCode: JSErrCodeJetStreamNotEnabled, Description: "jetstream not enabled"}} // ErrJetStreamNotEnabledForAccount is an error returned when JetStream is not enabled for an account. - ErrJetStreamNotEnabledForAccount JetStreamError = &jsError{apiErr: &JetStreamAPIError{ErrorCode: JSErrCodeJetStreamNotEnabledForAccount, Description: "jetstream not enabled"}} + ErrJetStreamNotEnabledForAccount JetStreamError = &jsError{apiErr: &APIError{ErrorCode: JSErrCodeJetStreamNotEnabledForAccount, Description: "jetstream not enabled"}} // ErrConsumerNotActive is an error returned when consumer is not active. ErrConsumerNotActive JetStreamError = &jsError{message: "consumer not active"} diff --git a/test/js_test.go b/test/js_test.go index df42a155c..86babe57d 100644 --- a/test/js_test.go +++ b/test/js_test.go @@ -135,17 +135,17 @@ func TestJetStreamNotAccountEnabled(t *testing.T) { } // matching arbitrary custom error via errors.Is(...) - customErr := &nats.JetStreamAPIError{ErrorCode: expected} + customErr := &nats.APIError{ErrorCode: expected} if ok := errors.Is(customErr, nats.ErrJetStreamNotEnabledForAccount); !ok { t.Fatal("Expected wrapped ErrJetStreamNotEnabledForAccount") } - customErr = &nats.JetStreamAPIError{ErrorCode: 1} + customErr = &nats.APIError{ErrorCode: 1} if ok := errors.Is(customErr, nats.ErrJetStreamNotEnabledForAccount); ok { t.Fatal("Expected to not match ErrJetStreamNotEnabled") } // matching to concrete type via errors.As(...) - var aerr *nats.JetStreamAPIError + var aerr *nats.APIError ok = errors.As(err, &aerr) if !ok { t.Fatal("Expected an APIError") @@ -4900,7 +4900,7 @@ func testJetStreamMirror_Source(t *testing.T, nodes ...*jsServer) { if err == nil { t.Fatal("Unexpected success") } - apiErr := &nats.JetStreamAPIError{} + apiErr := &nats.APIError{} if !errors.As(err, &apiErr) || apiErr.ErrorCode != 10093 { t.Fatalf("Expected API error 10093; got: %v", err) }