Comments (9)
This is expected behavior. If you defined a property in addition to the additionalProperties in the schema for dict
, we need a type to define it on. This is to ensure that adding a property doesn't fundamentally change the generated type (from a dictionary to a struct), so it's always a nested type here.
from swift-openapi-generator.
Gotcha, here's a fix, @grahamburgsma: apple/swift-openapi-runtime#103
from swift-openapi-generator.
Seems to be coming from the underlying Foundation.JSONEncoder, so might need to be filed on Foundation unless we identify that the generated code is doing something wrong.
from swift-openapi-generator.
@czechboy0 I don't believe so, the following works fine:
let empty = [String: [String]]()
let data = try! JSONEncoder().encode(empty)
print(String(decoding: data, as: UTF8.self)) // prints {}
Could be related to something going on here?
from swift-openapi-generator.
Actually I wonder if I've done something wrong in my spec definition as instead of transforming into a dictionary ([String: [String]]
) it generates a struct with an additionalProperties
property on it which can't be right.
What is the correct way to have a Swift Dictionary type generated?
from swift-openapi-generator.
A freeform JSON-based object? That'd be just:
type: object
If you'd like a dictionary of a specific type, for example integers, then:
type: object
additionalProperties:
type: integer
from swift-openapi-generator.
@czechboy0 That doesn't generate a dictionary property though, it gets put inside a wrapper struct which would make working with those types very clumsy. I must be doing something wrong, but this is what I'm seeing.
For example this:
Test:
type: object
properties:
dict:
type: object
additionalProperties:
type: integer
Gets generated into this (simplified):
struct Test {
struct dictPayload {
var additionalProperties: [String: Swift.Int]
}
var dict: Components.Schemas.Test.dictPayload?
}
Rather than what I would expect (and what all other OpenAPI generators seem to do):
struct Test {
var dict: [String: Swift.Int]?
}
from swift-openapi-generator.
@grahamburgsma Does this address your issue or do you believe that there is something we need to change in the generator?
from swift-openapi-generator.
@czechboy0 I understand why it generates the code as it does now, thanks for explaining that.
The original issue as described still exists though. An empty dictionary response fails to encode.
from swift-openapi-generator.
Related Issues (20)
- Expose internal symbols HOT 4
- Questions re: anyOf/allOf/oneOf, and one more thing HOT 5
- Swift tools version 5.9.2 but the installed version is 5.9.0 HOT 4
- Parsing ISO8601 date time from server fails due to milliseconds HOT 2
- How to send a file in multipart/form-data? HOT 3
- Convert the repsonse to an array of structs HOT 8
- Streamlining Use HOT 10
- How to throw errors that won't get transformed to ServerError? HOT 9
- Equatable conformance HOT 2
- Support `$dynamicAnchor` and `$dynamicRef` HOT 19
- Generated enums should conform to `CaseIterable` HOT 7
- Is it possible to use component refs in paths that accept multiple content types? HOT 8
- Multipart content not properly generated? HOT 11
- A way to group features or services to allow middleware to be applied to groups HOT 4
- Manual invocation of the generator and SPM warnings HOT 5
- Null property type with quotes not generated HOT 14
- Support for XML request body and response body HOT 7
- Support schemas.type: string, format: uri generates URL property not String HOT 3
- How to support OAuth2 Password flows? HOT 3
- allOf plus properties HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from swift-openapi-generator.