Skip to content

Optional type alias issue #512

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Kyle-Ye opened this issue Jan 23, 2024 · 2 comments
Closed

Optional type alias issue #512

Kyle-Ye opened this issue Jan 23, 2024 · 2 comments
Labels
kind/bug Feature doesn't work as expected. status/triage Collecting information required to triage the issue.

Comments

@Kyle-Ye
Copy link
Contributor

Kyle-Ye commented Jan 23, 2024

Description

draft_sequence has appeared multi place in openapi.yml file. Its type is "Int?" here.

So I add an OptionalInt type to rest myself from repeating. But the generated code is a little unexpected.

Reproduction

paths:
  "/t/{id}.json":
    get:
      ...
      responses:
        '200':
          description: specific posts
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  draft_sequence:
					$ref: '#/components/schemas/OptionalInt'

components:
  schemas:
    OptionalInt:
      type:
      - integer
      - 'null'

Package version(s)

1.2.0

Expected behavior

public var draft_sequence: Components.Schemas.OptionalInt

/// - Remark: Generated from `#/components/schemas/OptionalInt`.
public typealias OptionalInt = Swift.Int?

Actual behavior

public var draft_sequence: Components.Schemas.OptionalInt?

/// - Remark: Generated from `#/components/schemas/OptionalInt`.
public typealias OptionalInt = Swift.Int

Environment

Swift 5.9.2

Additional information

None

@Kyle-Ye Kyle-Ye added kind/bug Feature doesn't work as expected. status/triage Collecting information required to triage the issue. labels Jan 23, 2024
@simonjbeaumont
Copy link
Collaborator

@Kyle-Ye yes, it's current behaviour that we propagate the optionality to the point of use, and strip it from the type alias or struct in the components. The reason this has resulted in confusing looking code is the explicit use of "Optional" in the type name in the OpenAPI document.

While this might have been unexpected, does it present you with any issues? It's hard to tell from this example since it seems to be semantically equivalent, but maybe the snippet above is a simplification of what you are trying to achieve, and that, in your actual use case, draft_sequence is actually a much more complex type?

If so, what's it's rough shape? Is it an object?

@Kyle-Ye
Copy link
Contributor Author

Kyle-Ye commented Jan 24, 2024

yes, it's current behaviour that we propagate the optionality to the point of use, and strip it from the type alias or struct in the components. The reason this has resulted in confusing looking code is the explicit use of "Optional" in the type name in the OpenAPI document.

While this might have been unexpected, does it present you with any issues? It's hard to tell from this example since it seems to be semantically equivalent, but maybe the snippet above is a simplification of what you are trying to achieve, and that, in your actual use case, draft_sequence is actually a much more complex type?

If so, what's it's rough shape? Is it an object?

Got it. I'll update the name instead. eg. OptionalInt to DraftSequence so that we'll get the following result.

public var draft_sequence: Components.Schemas.DraftSequence?

/// - Remark: Generated from `#/components/schemas/OptionalInt`.
public typealias DraftSequence = Swift.Int

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/bug Feature doesn't work as expected. status/triage Collecting information required to triage the issue.
Projects
None yet
Development

No branches or pull requests

2 participants