Skip to content

Commit eb3c4d9

Browse files
refactor: rename swagger to oas in errors (#165)
1 parent 3563d41 commit eb3c4d9

31 files changed

+141
-132
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## Unreleased
99

10+
### Refactor
11+
12+
- renamed swagger to openapi in error messages
13+
1014
## 0.10.0 - 28-02-2024
1115

1216
### BREAKING CHANGES

main.go

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,26 @@ import (
1313
)
1414

1515
var (
16-
// ErrGenerateSwagger throws when fails the marshalling of the swagger struct.
17-
ErrGenerateSwagger = errors.New("fail to generate swagger")
18-
// ErrValidatingSwagger throws when given swagger params are not correct.
19-
ErrValidatingSwagger = errors.New("fails to validate swagger")
16+
// ErrGenerateOAS throws when fails the marshalling of the swagger struct.
17+
ErrGenerateOAS = errors.New("fail to generate openapi")
18+
// ErrValidatingOAS throws when given openapi params are not correct.
19+
ErrValidatingOAS = errors.New("fails to validate openapi")
20+
21+
// Deprecated: ErrGenerateSwagger has been deprecated, use ErrGenerateOAS instead.
22+
ErrGenerateSwagger = ErrGenerateOAS
23+
// Deprecated: ErrValidatingSwagger has been deprecated, use ErrValidatingOAS instead.
24+
ErrValidatingSwagger = ErrValidatingOAS
2025
)
2126

2227
const (
23-
// DefaultJSONDocumentationPath is the path of the swagger documentation in json format.
28+
// DefaultJSONDocumentationPath is the path of the openapi documentation in json format.
2429
DefaultJSONDocumentationPath = "/documentation/json"
25-
// DefaultYAMLDocumentationPath is the path of the swagger documentation in yaml format.
30+
// DefaultYAMLDocumentationPath is the path of the openapi documentation in yaml format.
2631
DefaultYAMLDocumentationPath = "/documentation/yaml"
2732
defaultOpenapiVersion = "3.0.0"
2833
)
2934

30-
// Router handle the api router and the swagger schema.
35+
// Router handle the api router and the openapi schema.
3136
// api router supported out of the box are:
3237
// - gorilla mux
3338
type Router[HandlerFunc, Route any] struct {
@@ -51,11 +56,11 @@ type Options struct {
5156
PathPrefix string
5257
}
5358

54-
// NewRouter generate new router with swagger. Default to OpenAPI 3.0.0
59+
// NewRouter generate new router with openapi. Default to OpenAPI 3.0.0
5560
func NewRouter[HandlerFunc, Route any](router apirouter.Router[HandlerFunc, Route], options Options) (*Router[HandlerFunc, Route], error) {
56-
swagger, err := generateNewValidOpenapi(options.Openapi)
61+
openapi, err := generateNewValidOpenapi(options.Openapi)
5762
if err != nil {
58-
return nil, fmt.Errorf("%w: %s", ErrValidatingSwagger, err)
63+
return nil, fmt.Errorf("%w: %s", ErrValidatingOAS, err)
5964
}
6065

6166
var ctx = options.Context
@@ -81,7 +86,7 @@ func NewRouter[HandlerFunc, Route any](router apirouter.Router[HandlerFunc, Rout
8186

8287
return &Router[HandlerFunc, Route]{
8388
router: router,
84-
swaggerSchema: swagger,
89+
swaggerSchema: openapi,
8590
context: ctx,
8691
yamlDocumentationPath: yamlDocumentationPath,
8792
jsonDocumentationPath: jsonDocumentationPath,
@@ -104,46 +109,46 @@ func (r Router[HandlerFunc, Route]) SubRouter(router apirouter.Router[HandlerFun
104109
}, nil
105110
}
106111

107-
func generateNewValidOpenapi(swagger *openapi3.T) (*openapi3.T, error) {
108-
if swagger == nil {
109-
return nil, fmt.Errorf("swagger is required")
112+
func generateNewValidOpenapi(openapi *openapi3.T) (*openapi3.T, error) {
113+
if openapi == nil {
114+
return nil, fmt.Errorf("openapi is required")
110115
}
111-
if swagger.OpenAPI == "" {
112-
swagger.OpenAPI = defaultOpenapiVersion
116+
if openapi.OpenAPI == "" {
117+
openapi.OpenAPI = defaultOpenapiVersion
113118
}
114-
if swagger.Paths == nil {
115-
swagger.Paths = &openapi3.Paths{}
119+
if openapi.Paths == nil {
120+
openapi.Paths = &openapi3.Paths{}
116121
}
117122

118-
if swagger.Info == nil {
119-
return nil, fmt.Errorf("swagger info is required")
123+
if openapi.Info == nil {
124+
return nil, fmt.Errorf("openapi info is required")
120125
}
121-
if swagger.Info.Title == "" {
122-
return nil, fmt.Errorf("swagger info title is required")
126+
if openapi.Info.Title == "" {
127+
return nil, fmt.Errorf("openapi info title is required")
123128
}
124-
if swagger.Info.Version == "" {
125-
return nil, fmt.Errorf("swagger info version is required")
129+
if openapi.Info.Version == "" {
130+
return nil, fmt.Errorf("openapi info version is required")
126131
}
127132

128-
return swagger, nil
133+
return openapi, nil
129134
}
130135

131136
// GenerateAndExposeOpenapi creates a /documentation/json route on router and
132137
// expose the generated swagger
133138
func (r Router[_, _]) GenerateAndExposeOpenapi() error {
134139
if err := r.swaggerSchema.Validate(r.context); err != nil {
135-
return fmt.Errorf("%w: %s", ErrValidatingSwagger, err)
140+
return fmt.Errorf("%w: %s", ErrValidatingOAS, err)
136141
}
137142

138143
jsonSwagger, err := r.swaggerSchema.MarshalJSON()
139144
if err != nil {
140-
return fmt.Errorf("%w json marshal: %s", ErrGenerateSwagger, err)
145+
return fmt.Errorf("%w json marshal: %s", ErrGenerateOAS, err)
141146
}
142147
r.router.AddRoute(http.MethodGet, r.jsonDocumentationPath, r.router.SwaggerHandler("application/json", jsonSwagger))
143148

144149
yamlSwagger, err := yaml.JSONToYAML(jsonSwagger)
145150
if err != nil {
146-
return fmt.Errorf("%w yaml marshal: %s", ErrGenerateSwagger, err)
151+
return fmt.Errorf("%w yaml marshal: %s", ErrGenerateOAS, err)
147152
}
148153
r.router.AddRoute(http.MethodGet, r.yamlDocumentationPath, r.router.SwaggerHandler("text/plain", yamlSwagger))
149154

main_test.go

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func TestNewRouter(t *testing.T) {
3333
r, err := NewRouter(mAPIRouter, Options{})
3434

3535
require.Nil(t, r)
36-
require.EqualError(t, err, fmt.Sprintf("%s: swagger is required", ErrValidatingSwagger))
36+
require.EqualError(t, err, fmt.Sprintf("%s: openapi is required", ErrValidatingOAS))
3737
})
3838

3939
t.Run("ok - with default context", func(t *testing.T) {
@@ -119,73 +119,73 @@ func TestNewRouter(t *testing.T) {
119119
}
120120

121121
func TestGenerateValidSwagger(t *testing.T) {
122-
t.Run("not ok - empty swagger info", func(t *testing.T) {
123-
swagger := &openapi3.T{}
122+
t.Run("not ok - empty openapi info", func(t *testing.T) {
123+
openapi := &openapi3.T{}
124124

125-
swagger, err := generateNewValidOpenapi(swagger)
126-
require.Nil(t, swagger)
127-
require.EqualError(t, err, "swagger info is required")
125+
openapi, err := generateNewValidOpenapi(openapi)
126+
require.Nil(t, openapi)
127+
require.EqualError(t, err, "openapi info is required")
128128
})
129129

130130
t.Run("not ok - empty info title", func(t *testing.T) {
131-
swagger := &openapi3.T{
131+
openapi := &openapi3.T{
132132
Info: &openapi3.Info{},
133133
}
134134

135-
swagger, err := generateNewValidOpenapi(swagger)
136-
require.Nil(t, swagger)
137-
require.EqualError(t, err, "swagger info title is required")
135+
openapi, err := generateNewValidOpenapi(openapi)
136+
require.Nil(t, openapi)
137+
require.EqualError(t, err, "openapi info title is required")
138138
})
139139

140140
t.Run("not ok - empty info version", func(t *testing.T) {
141-
swagger := &openapi3.T{
141+
openapi := &openapi3.T{
142142
Info: &openapi3.Info{
143143
Title: "title",
144144
},
145145
}
146146

147-
swagger, err := generateNewValidOpenapi(swagger)
148-
require.Nil(t, swagger)
149-
require.EqualError(t, err, "swagger info version is required")
147+
openapi, err := generateNewValidOpenapi(openapi)
148+
require.Nil(t, openapi)
149+
require.EqualError(t, err, "openapi info version is required")
150150
})
151151

152-
t.Run("ok - custom swagger", func(t *testing.T) {
153-
swagger := &openapi3.T{
152+
t.Run("ok - custom openapi", func(t *testing.T) {
153+
openapi := &openapi3.T{
154154
Info: &openapi3.Info{},
155155
}
156156

157-
swagger, err := generateNewValidOpenapi(swagger)
158-
require.Nil(t, swagger)
159-
require.EqualError(t, err, "swagger info title is required")
157+
openapi, err := generateNewValidOpenapi(openapi)
158+
require.Nil(t, openapi)
159+
require.EqualError(t, err, "openapi info title is required")
160160
})
161161

162-
t.Run("not ok - swagger is required", func(t *testing.T) {
163-
swagger, err := generateNewValidOpenapi(nil)
164-
require.Nil(t, swagger)
165-
require.EqualError(t, err, "swagger is required")
162+
t.Run("not ok - openapi is required", func(t *testing.T) {
163+
openapi, err := generateNewValidOpenapi(nil)
164+
require.Nil(t, openapi)
165+
require.EqualError(t, err, "openapi is required")
166166
})
167167

168168
t.Run("ok", func(t *testing.T) {
169169
info := &openapi3.Info{
170170
Title: "my title",
171171
Version: "my version",
172172
}
173-
swagger := &openapi3.T{
173+
openapi := &openapi3.T{
174174
Info: info,
175175
}
176176

177-
swagger, err := generateNewValidOpenapi(swagger)
177+
openapi, err := generateNewValidOpenapi(openapi)
178178
require.NoError(t, err)
179179
require.Equal(t, &openapi3.T{
180180
OpenAPI: defaultOpenapiVersion,
181181
Info: info,
182182
Paths: &openapi3.Paths{},
183-
}, swagger)
183+
}, openapi)
184184
})
185185
}
186186

187187
func TestGenerateAndExposeSwagger(t *testing.T) {
188-
t.Run("fails swagger validation", func(t *testing.T) {
188+
t.Run("fails openapi validation", func(t *testing.T) {
189189
mRouter := mux.NewRouter()
190190
router, err := NewRouter(gorilla.NewRouter(mRouter), Options{
191191
Openapi: &openapi3.T{
@@ -204,17 +204,17 @@ func TestGenerateAndExposeSwagger(t *testing.T) {
204204

205205
err = router.GenerateAndExposeOpenapi()
206206
require.Error(t, err)
207-
require.True(t, strings.HasPrefix(err.Error(), fmt.Sprintf("%s:", ErrValidatingSwagger)))
207+
require.True(t, strings.HasPrefix(err.Error(), fmt.Sprintf("%s:", ErrValidatingOAS)))
208208
})
209209

210-
t.Run("correctly expose json documentation from loaded swagger file", func(t *testing.T) {
210+
t.Run("correctly expose json documentation from loaded openapi file", func(t *testing.T) {
211211
mRouter := mux.NewRouter()
212212

213-
swagger, err := openapi3.NewLoader().LoadFromFile("testdata/users_employees.json")
213+
openapi, err := openapi3.NewLoader().LoadFromFile("testdata/users_employees.json")
214214
require.NoError(t, err)
215215

216216
router, err := NewRouter(gorilla.NewRouter(mRouter), Options{
217-
Openapi: swagger,
217+
Openapi: openapi,
218218
})
219219
require.NoError(t, err)
220220

@@ -234,14 +234,14 @@ func TestGenerateAndExposeSwagger(t *testing.T) {
234234
require.JSONEq(t, string(actual), body)
235235
})
236236

237-
t.Run("correctly expose json documentation from loaded swagger file - custom path", func(t *testing.T) {
237+
t.Run("correctly expose json documentation from loaded openapi file - custom path", func(t *testing.T) {
238238
mRouter := mux.NewRouter()
239239

240-
swagger, err := openapi3.NewLoader().LoadFromFile("testdata/users_employees.json")
240+
openapi, err := openapi3.NewLoader().LoadFromFile("testdata/users_employees.json")
241241
require.NoError(t, err)
242242

243243
router, err := NewRouter(gorilla.NewRouter(mRouter), Options{
244-
Openapi: swagger,
244+
Openapi: openapi,
245245
JSONDocumentationPath: "/custom/path",
246246
})
247247
require.NoError(t, err)
@@ -262,14 +262,14 @@ func TestGenerateAndExposeSwagger(t *testing.T) {
262262
require.JSONEq(t, string(actual), body)
263263
})
264264

265-
t.Run("correctly expose yaml documentation from loaded swagger file", func(t *testing.T) {
265+
t.Run("correctly expose yaml documentation from loaded openapi file", func(t *testing.T) {
266266
mRouter := mux.NewRouter()
267267

268-
swagger, err := openapi3.NewLoader().LoadFromFile("testdata/users_employees.json")
268+
openapi, err := openapi3.NewLoader().LoadFromFile("testdata/users_employees.json")
269269
require.NoError(t, err)
270270

271271
router, err := NewRouter(gorilla.NewRouter(mRouter), Options{
272-
Openapi: swagger,
272+
Openapi: openapi,
273273
})
274274
require.NoError(t, err)
275275

@@ -289,14 +289,14 @@ func TestGenerateAndExposeSwagger(t *testing.T) {
289289
require.YAMLEq(t, string(expected), body, string(body))
290290
})
291291

292-
t.Run("correctly expose yaml documentation from loaded swagger file - custom path", func(t *testing.T) {
292+
t.Run("correctly expose yaml documentation from loaded openapi file - custom path", func(t *testing.T) {
293293
mRouter := mux.NewRouter()
294294

295-
swagger, err := openapi3.NewLoader().LoadFromFile("testdata/users_employees.json")
295+
openapi, err := openapi3.NewLoader().LoadFromFile("testdata/users_employees.json")
296296
require.NoError(t, err)
297297

298298
router, err := NewRouter(gorilla.NewRouter(mRouter), Options{
299-
Openapi: swagger,
299+
Openapi: openapi,
300300
YAMLDocumentationPath: "/custom/path",
301301
})
302302
require.NoError(t, err)
@@ -323,8 +323,8 @@ func TestGenerateAndExposeSwagger(t *testing.T) {
323323
router, err := NewRouter(gorilla.NewRouter(mRouter), Options{
324324
Openapi: &openapi3.T{
325325
Info: &openapi3.Info{
326-
Title: "test swagger title",
327-
Version: "test swagger version",
326+
Title: "test openapi title",
327+
Version: "test openapi version",
328328
},
329329
},
330330
JSONDocumentationPath: "/custom/path",
@@ -402,8 +402,8 @@ func TestGenerateAndExposeSwagger(t *testing.T) {
402402
router, err := NewRouter(gorilla.NewRouter(mRouter), Options{
403403
Openapi: &openapi3.T{
404404
Info: &openapi3.Info{
405-
Title: "test swagger title",
406-
Version: "test swagger version",
405+
Title: "test openapi title",
406+
Version: "test openapi version",
407407
},
408408
},
409409
JSONDocumentationPath: "/custom/path",

operation_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func TestNewOperation(t *testing.T) {
2727
operation.Responses = openapi3.NewResponses()
2828
return operation
2929
},
30-
expectedJSON: `{"info":{"title":"test swagger title","version":"test swagger version"},"openapi":"3.0.0","paths":{"/":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"bar":{"maximum":15,"minimum":5,"type":"integer"},"foo":{"type":"string"}},"type":"object"}}}},"responses":{"default":{"description":""}}}}}}`,
30+
expectedJSON: `{"info":{"title":"test openapi title","version":"test openapi version"},"openapi":"3.0.0","paths":{"/":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"bar":{"maximum":15,"minimum":5,"type":"integer"},"foo":{"type":"string"}},"type":"object"}}}},"responses":{"default":{"description":""}}}}}}`,
3131
},
3232
{
3333
name: "add response",
@@ -36,19 +36,19 @@ func TestNewOperation(t *testing.T) {
3636
operation.AddResponse(200, response)
3737
return operation
3838
},
39-
expectedJSON: `{"info":{"title":"test swagger title","version":"test swagger version"},"openapi":"3.0.0","paths":{"/":{"post":{"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"bar":{"maximum":15,"minimum":5,"type":"integer"},"foo":{"type":"string"}},"type":"object"}}},"description":""}}}}}}`,
39+
expectedJSON: `{"info":{"title":"test openapi title","version":"test openapi version"},"openapi":"3.0.0","paths":{"/":{"post":{"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"bar":{"maximum":15,"minimum":5,"type":"integer"},"foo":{"type":"string"}},"type":"object"}}},"description":""}}}}}}`,
4040
},
4141
}
4242

4343
for _, test := range tests {
4444
t.Run(test.name, func(t *testing.T) {
45-
swagger := getBaseSwagger(t)
46-
swagger.OpenAPI = "3.0.0"
45+
openapi := getBaseSwagger(t)
46+
openapi.OpenAPI = "3.0.0"
4747
operation := test.getOperation(t, NewOperation())
4848

49-
swagger.AddOperation("/", http.MethodPost, operation.Operation)
49+
openapi.AddOperation("/", http.MethodPost, operation.Operation)
5050

51-
data, _ := swagger.MarshalJSON()
51+
data, _ := openapi.MarshalJSON()
5252
jsonData := string(data)
5353
require.JSONEq(t, test.expectedJSON, jsonData, "actual json data: %s", jsonData)
5454
})

route.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ var (
2424
)
2525

2626
// AddRawRoute add route to router with specific method, path and handler. Add the
27-
// router also to the swagger schema, after validating it
27+
// router also to the openapi schema, after validating it
2828
func (r Router[HandlerFunc, Route]) AddRawRoute(method string, routePath string, handler HandlerFunc, operation Operation) (Route, error) {
2929
op := operation.Operation
3030
if op != nil {

0 commit comments

Comments
 (0)