Skip to content

Commit d12860c

Browse files
authored
use %w to wrap the errors (#596)
1 parent 68016e0 commit d12860c

File tree

13 files changed

+50
-47
lines changed

13 files changed

+50
-47
lines changed

jsoninfo/unmarshal.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type ObjectDecoder struct {
2525
func NewObjectDecoder(data []byte) (*ObjectDecoder, error) {
2626
var remainingFields map[string]json.RawMessage
2727
if err := json.Unmarshal(data, &remainingFields); err != nil {
28-
return nil, fmt.Errorf("failed to unmarshal extension properties: %v (%s)", err, data)
28+
return nil, fmt.Errorf("failed to unmarshal extension properties: %w (%s)", err, data)
2929
}
3030
return &ObjectDecoder{
3131
Data: data,
@@ -87,7 +87,7 @@ func (decoder *ObjectDecoder) DecodeStructFieldsAndExtensions(value interface{})
8787
continue
8888
}
8989
}
90-
return fmt.Errorf("failed to unmarshal property %q (%s): %v",
90+
return fmt.Errorf("failed to unmarshal property %q (%s): %w",
9191
field.JSONName, fieldValue.Type().String(), err)
9292
}
9393
if !isPtr {
@@ -109,7 +109,7 @@ func (decoder *ObjectDecoder) DecodeStructFieldsAndExtensions(value interface{})
109109
continue
110110
}
111111
}
112-
return fmt.Errorf("failed to unmarshal property %q (%s): %v",
112+
return fmt.Errorf("failed to unmarshal property %q (%s): %w",
113113
field.JSONName, fieldPtr.Type().String(), err)
114114
}
115115

openapi3/components.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func (components *Components) Validate(ctx context.Context) (err error) {
9999
return
100100
}
101101
if err = v.Validate(ctx); err != nil {
102-
return fmt.Errorf("%s: %s", k, err)
102+
return fmt.Errorf("%s: %w", k, err)
103103
}
104104
}
105105

openapi3/header.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,22 +71,22 @@ func (header *Header) Validate(ctx context.Context) error {
7171
sm.Style == SerializationSimple && !sm.Explode ||
7272
sm.Style == SerializationSimple && sm.Explode; !smSupported {
7373
e := fmt.Errorf("serialization method with style=%q and explode=%v is not supported by a header parameter", sm.Style, sm.Explode)
74-
return fmt.Errorf("header schema is invalid: %v", e)
74+
return fmt.Errorf("header schema is invalid: %w", e)
7575
}
7676

7777
if (header.Schema == nil) == (header.Content == nil) {
7878
e := fmt.Errorf("parameter must contain exactly one of content and schema: %v", header)
79-
return fmt.Errorf("header schema is invalid: %v", e)
79+
return fmt.Errorf("header schema is invalid: %w", e)
8080
}
8181
if schema := header.Schema; schema != nil {
8282
if err := schema.Validate(ctx); err != nil {
83-
return fmt.Errorf("header schema is invalid: %v", err)
83+
return fmt.Errorf("header schema is invalid: %w", err)
8484
}
8585
}
8686

8787
if content := header.Content; content != nil {
8888
if err := content.Validate(ctx); err != nil {
89-
return fmt.Errorf("header content is invalid: %v", err)
89+
return fmt.Errorf("header content is invalid: %w", err)
9090
}
9191
}
9292
return nil

openapi3/loader.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func (loader *Loader) loadSingleElementFromURI(ref string, rootPath *url.URL, el
101101

102102
resolvedPath, err := resolvePath(rootPath, parsedURL)
103103
if err != nil {
104-
return nil, fmt.Errorf("could not resolve path: %v", err)
104+
return nil, fmt.Errorf("could not resolve path: %w", err)
105105
}
106106

107107
data, err := loader.readURL(resolvedPath)
@@ -285,7 +285,7 @@ func (loader *Loader) resolveComponent(
285285

286286
if cursor, err = drillIntoField(cursor, pathPart); err != nil {
287287
e := failedToResolveRefFragmentPart(ref, pathPart)
288-
return nil, fmt.Errorf("%s: %s", e.Error(), err.Error())
288+
return nil, fmt.Errorf("%s: %w", e, err)
289289
}
290290
if cursor == nil {
291291
return nil, failedToResolveRefFragmentPart(ref, pathPart)
@@ -430,11 +430,11 @@ func (loader *Loader) resolveRef(doc *T, ref string, path *url.URL) (*T, string,
430430

431431
var resolvedPath *url.URL
432432
if resolvedPath, err = resolvePath(path, parsedURL); err != nil {
433-
return nil, "", nil, fmt.Errorf("error resolving path: %v", err)
433+
return nil, "", nil, fmt.Errorf("error resolving path: %w", err)
434434
}
435435

436436
if doc, err = loader.loadFromURIInternal(resolvedPath); err != nil {
437-
return nil, "", nil, fmt.Errorf("error resolving reference %q: %v", ref, err)
437+
return nil, "", nil, fmt.Errorf("error resolving reference %q: %w", ref, err)
438438
}
439439

440440
return doc, "#" + fragment, resolvedPath, nil

openapi3/loader_test.go

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package openapi3
22

33
import (
4-
"errors"
54
"fmt"
65
"net"
76
"net/http"
@@ -524,23 +523,27 @@ paths: {}
524523
servers:
525524
- @@@
526525
`
527-
for value, expected := range map[string]error{
528-
`{url: /}`: nil,
529-
`{url: "http://{x}.{y}.example.com"}`: errors.New("invalid servers: server has undeclared variables"),
530-
`{url: "http://{x}.y}.example.com"}`: errors.New("invalid servers: server URL has mismatched { and }"),
531-
`{url: "http://{x.example.com"}`: errors.New("invalid servers: server URL has mismatched { and }"),
532-
`{url: "http://{x}.example.com", variables: {x: {default: "www"}}}`: nil,
533-
`{url: "http://{x}.example.com", variables: {x: {default: "www", enum: ["www"]}}}`: nil,
534-
`{url: "http://{x}.example.com", variables: {x: {enum: ["www"]}}}`: errors.New(`invalid servers: field default is required in {"enum":["www"]}`),
535-
`{url: "http://www.example.com", variables: {x: {enum: ["www"]}}}`: errors.New("invalid servers: server has undeclared variables"),
536-
`{url: "http://{y}.example.com", variables: {x: {enum: ["www"]}}}`: errors.New("invalid servers: server has undeclared variables"),
526+
for value, expected := range map[string]string{
527+
`{url: /}`: "",
528+
`{url: "http://{x}.{y}.example.com"}`: "invalid servers: server has undeclared variables",
529+
`{url: "http://{x}.y}.example.com"}`: "invalid servers: server URL has mismatched { and }",
530+
`{url: "http://{x.example.com"}`: "invalid servers: server URL has mismatched { and }",
531+
`{url: "http://{x}.example.com", variables: {x: {default: "www"}}}`: "",
532+
`{url: "http://{x}.example.com", variables: {x: {default: "www", enum: ["www"]}}}`: "",
533+
`{url: "http://{x}.example.com", variables: {x: {enum: ["www"]}}}`: `invalid servers: field default is required in {"enum":["www"]}`,
534+
`{url: "http://www.example.com", variables: {x: {enum: ["www"]}}}`: "invalid servers: server has undeclared variables",
535+
`{url: "http://{y}.example.com", variables: {x: {enum: ["www"]}}}`: "invalid servers: server has undeclared variables",
537536
} {
538537
t.Run(value, func(t *testing.T) {
539538
loader := NewLoader()
540539
doc, err := loader.LoadFromData([]byte(strings.Replace(spec, "@@@", value, 1)))
541540
require.NoError(t, err)
542541
err = doc.Validate(loader.Context)
543-
require.Equal(t, expected, err)
542+
if expected == "" {
543+
require.NoError(t, err)
544+
} else {
545+
require.EqualError(t, err, expected)
546+
}
544547
})
545548
}
546549
}

openapi3/media_type.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,10 @@ func (mediaType *MediaType) Validate(ctx context.Context) error {
9595
} else if examples := mediaType.Examples; examples != nil {
9696
for k, v := range examples {
9797
if err := v.Validate(ctx); err != nil {
98-
return fmt.Errorf("%s: %s", k, err)
98+
return fmt.Errorf("%s: %w", k, err)
9999
}
100100
if err := validateExampleValue(v.Value.Value, schema.Value); err != nil {
101-
return fmt.Errorf("%s: %s", k, err)
101+
return fmt.Errorf("%s: %w", k, err)
102102
}
103103
}
104104
}

openapi3/openapi3.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,14 @@ func (doc *T) Validate(ctx context.Context, opts ...ValidationOption) error {
6969
// NOTE: only mention info/components/paths/... key in this func's errors.
7070

7171
{
72-
wrap := func(e error) error { return fmt.Errorf("invalid components: %v", e) }
72+
wrap := func(e error) error { return fmt.Errorf("invalid components: %w", e) }
7373
if err := doc.Components.Validate(ctx); err != nil {
7474
return wrap(err)
7575
}
7676
}
7777

7878
{
79-
wrap := func(e error) error { return fmt.Errorf("invalid info: %v", e) }
79+
wrap := func(e error) error { return fmt.Errorf("invalid info: %w", e) }
8080
if v := doc.Info; v != nil {
8181
if err := v.Validate(ctx); err != nil {
8282
return wrap(err)
@@ -87,7 +87,7 @@ func (doc *T) Validate(ctx context.Context, opts ...ValidationOption) error {
8787
}
8888

8989
{
90-
wrap := func(e error) error { return fmt.Errorf("invalid paths: %v", e) }
90+
wrap := func(e error) error { return fmt.Errorf("invalid paths: %w", e) }
9191
if v := doc.Paths; v != nil {
9292
if err := v.Validate(ctx); err != nil {
9393
return wrap(err)
@@ -98,7 +98,7 @@ func (doc *T) Validate(ctx context.Context, opts ...ValidationOption) error {
9898
}
9999

100100
{
101-
wrap := func(e error) error { return fmt.Errorf("invalid security: %v", e) }
101+
wrap := func(e error) error { return fmt.Errorf("invalid security: %w", e) }
102102
if v := doc.Security; v != nil {
103103
if err := v.Validate(ctx); err != nil {
104104
return wrap(err)
@@ -107,7 +107,7 @@ func (doc *T) Validate(ctx context.Context, opts ...ValidationOption) error {
107107
}
108108

109109
{
110-
wrap := func(e error) error { return fmt.Errorf("invalid servers: %v", e) }
110+
wrap := func(e error) error { return fmt.Errorf("invalid servers: %w", e) }
111111
if v := doc.Servers; v != nil {
112112
if err := v.Validate(ctx); err != nil {
113113
return wrap(err)

openapi3/parameter.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -296,23 +296,23 @@ func (parameter *Parameter) Validate(ctx context.Context) error {
296296
}
297297
if !smSupported {
298298
e := fmt.Errorf("serialization method with style=%q and explode=%v is not supported by a %s parameter", sm.Style, sm.Explode, in)
299-
return fmt.Errorf("parameter %q schema is invalid: %v", parameter.Name, e)
299+
return fmt.Errorf("parameter %q schema is invalid: %w", parameter.Name, e)
300300
}
301301

302302
if (parameter.Schema == nil) == (parameter.Content == nil) {
303303
e := errors.New("parameter must contain exactly one of content and schema")
304-
return fmt.Errorf("parameter %q schema is invalid: %v", parameter.Name, e)
304+
return fmt.Errorf("parameter %q schema is invalid: %w", parameter.Name, e)
305305
}
306306

307307
if content := parameter.Content; content != nil {
308308
if err := content.Validate(ctx); err != nil {
309-
return fmt.Errorf("parameter %q content is invalid: %v", parameter.Name, err)
309+
return fmt.Errorf("parameter %q content is invalid: %w", parameter.Name, err)
310310
}
311311
}
312312

313313
if schema := parameter.Schema; schema != nil {
314314
if err := schema.Validate(ctx); err != nil {
315-
return fmt.Errorf("parameter %q schema is invalid: %v", parameter.Name, err)
315+
return fmt.Errorf("parameter %q schema is invalid: %w", parameter.Name, err)
316316
}
317317
if parameter.Example != nil && parameter.Examples != nil {
318318
return fmt.Errorf("parameter %q example and examples are mutually exclusive", parameter.Name)
@@ -327,10 +327,10 @@ func (parameter *Parameter) Validate(ctx context.Context) error {
327327
} else if examples := parameter.Examples; examples != nil {
328328
for k, v := range examples {
329329
if err := v.Validate(ctx); err != nil {
330-
return fmt.Errorf("%s: %s", k, err)
330+
return fmt.Errorf("%s: %w", k, err)
331331
}
332332
if err := validateExampleValue(v.Value.Value, schema.Value); err != nil {
333-
return fmt.Errorf("%s: %s", k, err)
333+
return fmt.Errorf("%s: %w", k, err)
334334
}
335335
}
336336
}

openapi3/schema.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,7 @@ func (schema *Schema) validate(ctx context.Context, stack []*Schema) (err error)
755755

756756
if x := schema.Example; x != nil && !validationOpts.ExamplesValidationDisabled {
757757
if err := validateExampleValue(x, schema); err != nil {
758-
return fmt.Errorf("invalid schema example: %s", err)
758+
return fmt.Errorf("invalid schema example: %w", err)
759759
}
760760
}
761761

openapi3/schema_formats.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ var SchemaStringFormats = make(map[string]Format, 4)
2828
func DefineStringFormat(name string, pattern string) {
2929
re, err := regexp.Compile(pattern)
3030
if err != nil {
31-
err := fmt.Errorf("format %q has invalid pattern %q: %v", name, pattern, err)
31+
err := fmt.Errorf("format %q has invalid pattern %q: %w", name, pattern, err)
3232
panic(err)
3333
}
3434
SchemaStringFormats[name] = Format{regexp: re}

0 commit comments

Comments
 (0)