- Notifications
You must be signed in to change notification settings - Fork 149
Description
Description
When encoding of one of my Entities, I always end up in an error. In the end I always end up here (with value being the TEST_ENUM of type ConfigurationType.Value1Payload):
public func encodeToSingleValueContainer<T: Encodable>(_ value: T) throws { var container = singleValueContainer() try container.encode(value) // Thread 1: EXC_BREAKPOINT }I noticed that this only happens when I use the combination of two attributes which both come down to some anyOf structure. This is just a minimal running example, my real code has way more attributes and it's only those two interfering.
In my code example below, if I either remove the configurationType OR the detailsType from my input json (or if I set one of their values to null), the code just runs fine.
Not sure if this is a bug or if I'm doing something wrong, but since the decoding works as expected, I think it's an undesired behaviour?
Reproduction
#openapi.yaml openapi: 3.0.1 info: title: API Reference version: "1.0" paths: /whatever/{subActionUuid}: put: operationId: updateSubAction parameters: - name: subActionUuid in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SubAction' required: true responses: default: description: SubAction content: application/json: schema: $ref: '#/components/schemas/SubAction' components: schemas: SubAction: type: object properties: uuid: type: string subActionDetails: $ref: '#/components/schemas/SubActionDetails' configurationType: $ref: '#/components/schemas/ConfigurationType' SubActionDetails: required: - detailsType anyOf: - oneOf: - $ref: '#/components/schemas/EmptySubActionDetails' discriminator: propertyName: detailsType mapping: EMPTY: '#/components/schemas/EmptySubActionDetails' - type: object EmptySubActionDetails: type: object allOf: - $ref: '#/components/schemas/SubActionDetailsSchema' SubActionDetailsSchema: type: object properties: uuid: type: string detailsType: type: string required: - type ConfigurationType: anyOf: - type: string enum: - TEST_ENUM - type: string x-enumAsRef: false#openapi-generator-config.yml generate: - types - client accessModifier: publicimport Foundation // note: setting configurationType or detailsType to null will prevent the error from being thrown. let input = """ { "uuid": "uuid", "configurationType": "TEST_ENUM", "subActionDetails": { "uuid": "uuid", "detailsType":"EMPTY" } } """ let decoded = try! JSONDecoder().decode(Components.Schemas.SubAction.self, from: input.data(using: .utf8)!) let encoded = try! JSONEncoder().encode(decoded) # fails here let result = String(data: encoded, encoding: .utf8) print(result!)Package version(s)
openapi-generator: 1.10.2
openapi-runtime: 1.8.2
openapi-urlsession: 1.10
Expected behavior
The encoding should not throw any error, even when both attributes are set.
Environment
swift: 6.1.2
Additional information
I'm bad with swift debugging, I couldn't see any helpful output from the stack trace, but if you want me to, I can provide it.