Skip to content

Optional type alias issue #512

Closed
Closed

Description

@Kyle-Ye

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

Activity

  1. added
    kind/bugFeature doesn't work as expected.
    status/triageCollecting information required to triage the issue.
    on Jan 23, 2024
  2. simonjbeaumont commented on Jan 24, 2024

    @simonjbeaumont
    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?

  3. Kyle-Ye commented on Jan 24, 2024

    @Kyle-Ye
    ContributorAuthor

    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

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugFeature doesn't work as expected.status/triageCollecting information required to triage the issue.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions