Giter Club home page Giter Club logo

Comments (8)

sliemeobn avatar sliemeobn commented on July 17, 2024 2

bonus fact: I also intended to use this for a nice, shared "pagination" definition for all fetching endpoints

by defining this

components:
  parameters:
    Pagination:
      name: pagination
      in: query
      schema: { $ref: "#/components/schemas/Pagination" }
      explode: true
      style: form
  schemas:
    Pagination:
      type: object
      properties:
        page: { type: number, default: 1 }
        perPage: { type: number, default: 50 }

I was hoping I could just add "pagination" like that

  /users:
    get:
      operationId: getUsers
      parameters:
      - name: filter
      # some filter schema here #
      # ...
      - $ref: "#/components/parameters/Pagination"

from swift-openapi-generator.

czechboy0 avatar czechboy0 commented on July 17, 2024 2

Verified that this gets resolved by #226.

from swift-openapi-generator.

czechboy0 avatar czechboy0 commented on July 17, 2024 1

The new URIEncoder/Decoder should hopefully lead to this being addressed relatively soon. #192

from swift-openapi-generator.

wangzhizhou avatar wangzhizhou commented on July 17, 2024 1

Verified that this gets resolved by #226.

Great I will have a try. Thank you for your job

from swift-openapi-generator.

czechboy0 avatar czechboy0 commented on July 17, 2024 1

@wangzhizhou You'll need to also override the branch of swift-openapi-runtime to hd-uri-encoder-integration until it's all landed.

from swift-openapi-generator.

sliemeobn avatar sliemeobn commented on July 17, 2024

since the docs suggest that "in: query + style: form + exploded: true" is supported I stumbled over this when writing a new server (slack thread)

I was going by this example from the swagger docs:

Objects can be serialized as:
form – /points?color=R,100,G,200,B,150 or /points?R=100&G=200&B=150, depending on the explode keyword

my desired route would look like this:

  /users:
    get:
      operationId: getUsers
      parameters:
      - name: filter
        in: query
        schema:
          type: object
          properties:
            name: { type: string }
            group: { type: string }
            role: { type: string }
        explode: true
        style: form

however, the generated code produces an error around the conversion:

error: instance method 'setQueryItemAsText(in:name:value:)' requires that 'Operations.getUsers.Input.Query.filterPayload' conform to '_StringConvertible'
                try converter.setQueryItemAsText(

in the generated deserializer code (UniversalServer extension)

    func getUsers(request: Request, metadata: ServerRequestMetadata) async throws -> Response {
        try await handle(
            request: request,
            with: metadata,
            forOperation: Operations.getUsers.id,
            using: APIHandler.getUsers,
            deserializer: { request, metadata in let path: Operations.getUsers.Input.Path = .init()
                let query: Operations.getUsers.Input.Query = .init(
                    filter: try converter.getOptionalQueryItemAsText(
                        in: metadata.queryParameters,
                        name: "filter",
                        as: Operations.getUsers.Input.Query.filterPayload.self
                    )
                )

in addition of this being a really useful feature, it feels to me that the docs are incorrectly suggesting that this is supported.
edit: just realized the docs do state that only primitive and array is supported, I just didn't rtfm correcly ; )

from swift-openapi-generator.

wangzhizhou avatar wangzhizhou commented on July 17, 2024

I use the package:

.package(url: "https://github.com/czechboy0/swift-openapi-generator.git", branch: "hd-uri-encoder-integration")

image

from swift-openapi-generator.

wangzhizhou avatar wangzhizhou commented on July 17, 2024

Thx, it works!

from swift-openapi-generator.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.