OpenAPITools / openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
https://openapi-generator.tech
Apache License 2.0
22.02k stars 6.61k forks source link

[BUG][Go] Inline enums not generated #2360

Open fantavlik opened 5 years ago

fantavlik commented 5 years ago

Bug Report Checklist

Description

Enums that are declared inline are simply being declared as strings, while the same enum defined as a separate schema is properly captured with all legal values.

openapi-generator version

4.0.0-SNAPSHOT built from this commit: https://github.com/OpenAPITools/openapi-generator/commit/b128d1470709c44c6c7b6a906e1993d1c2758b52

OpenAPI declaration file content or url

sample.yaml:

openapi: "3.0.0"
info:
  version: v1
  title: Fake Service
servers:
- url: https://fake.net
paths:
  /status/details:
    get:
      summary: Get status details
      operationId: getStatus
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/StatusDetails"

components:
  schemas:
    State:
      type: string
      enum:
      - "IN_PROGRESS"
      - "READY"
      - "FAILED"
    StatusDetails:
      properties:
        id:
          type: string
        stateInline: # enum not captured, just declared as "string"
          type: string
          enum:
          - "IN_PROGRESS"
          - "READY"
          - "FAILED"
        state: # works as expected
          $ref: "#/components/schemas/State"
Command line used for generation

java -jar openapi-generator-cli.jar generate -i sample.yaml -g go -o ./sample-go

Steps to reproduce
  1. git clone https://github.com/OpenAPITools/openapi-generator.git
  2. cd openapi-generator
  3. git checkout b128d1470709c44c6c7b6a906e1993d1c2758b52
  4. mvn clean install
  5. ln -s modules/openapi-generator-cli/target/openapi-generator-cli.jar .
  6. java -jar openapi-generator-cli.jar generate -i sample.yaml -g go -o ./sample-go
Related issues/PRs

https://github.com/OpenAPITools/openapi-generator/issues/2200 https://github.com/OpenAPITools/openapi-generator/issues/1702 https://github.com/OpenAPITools/openapi-generator/issues/1706

Actual vs Expected output

Go: model_status_details.go (actual):

package openapi

type StatusDetails struct {
    Id string `json:"id,omitempty"`
    StateInline string `json:"stateInline,omitempty"`
    State State `json:"state,omitempty"`
}

model_status_details.go (expected):

package openapi

type StatusDetails struct {
    Id string `json:"id,omitempty"`
    StateInline StateInlineEnum `json:"stateInline,omitempty"`
    State State `json:"state,omitempty"`
}

type StateInlineEnum string

// List of StateInlineEnum
const (
    IN_PROGRESS StateInlineEnum = "IN_PROGRESS"
    READY StateInlineEnum = "READY"
    FAILED StateInlineEnum = "FAILED"
)
Suggest a fix

PR has been put up: https://github.com/OpenAPITools/openapi-generator/pull/2494

auto-labeler[bot] commented 5 years ago

👍 Thanks for opening this issue! 🏷 I have applied any labels matching special text in your issue.

The team will review the labels and make any necessary changes.

longquanzheng commented 1 year ago

Hi, is there any updates on this issue?

igorroncevic commented 1 year ago

The issue is still relevant btw.

Only fix I've been able to find is to reference enum type:

Inline definitions, such as:

# YourModel.yml
type: object
properties:
   your_enum:
      type: string
      enum: 
        - value_1
        - value_2

unfortunately won't work.

ctreatma commented 1 year ago

16582 includes an example for generating inline enums using custom templates, which may be useful for teams using <= v6.6.0 of the generator, but isn't a long-term solution.

For users of v7.0.0+, this issue can be better addressed by setting RESOLVE_INLINE_ENUMS=true