-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Issue generating enum in paths #399
Description
I may be doing something wrong, or using it wrong, but I am getting errors when generating the HTTP client with the following openapi spec:
# openapi.yaml
openapi: 3.0.0
info:
description: example
title: example-api
version: 0.0.1
paths:
'/path':
get:
responses:
'200':
content:
application/json:
schema:
type: object
properties:
status:
type: string
enum:
- online
- offline
example: 'online'
components:
schemas: {}
Using master, I generate this with: go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen -package=clients -generate=client,types -o http.gen.go openapi.yaml
And that generates the following Go code:
...
type GetPathResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *struct {
Status *N200Status `json:"status,omitempty"`
}
}
...
However N200Status doesn't exist as a type, it hasn't been generated for some reason. Prior to #241 it used to generate it as:
type GetPathResponse struct {
Body []byte
HTTPResponse *http.Response
JSON200 *struct {
Status *string `json:"status,omitempty"`
}
}
I think the issue might be because enum types are only generated for swagger.Components but this enum is on swagger.Paths: https://github.com/deepmap/oapi-codegen/blob/master/pkg/codegen/codegen.go#L301-L304
I am able to get around this issue by moving the enum into the components section which will then generate all the types:
openapi: 3.0.0
info:
description: example
title: example-api
version: 0.0.1
paths:
'/path':
get:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
components:
schemas:
Response:
type: object
properties:
status:
type: string
enum:
- online
- offline
example: 'online'
Just wondering if this expected behaviour and if I should always put everything in the components section?