From 3522e73d9fe0e2c33613e55b0b317839235216d3 Mon Sep 17 00:00:00 2001 From: andrewelliott <> Date: Sun, 18 Jun 2023 21:33:32 -0500 Subject: [PATCH 1/8] Use ResolvedParameter typealias where applicable --- .../Translator/Operations/OperationDescription.swift | 2 +- .../Translator/Parameters/TypedParameter.swift | 8 ++++---- .../Translator/Parameters/translateParameter.swift | 2 +- .../ServerTranslator/translateServerMethod.swift | 4 ++-- .../Translator/TypeAssignment/TypeAssigner.swift | 4 ++-- .../TypesTranslator/translateComponentParameters.swift | 6 +++--- .../Translator/TypesTranslator/translateOperations.swift | 2 +- .../Translator/TypeAssignment/Test_TypeAssigner.swift | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Operations/OperationDescription.swift b/Sources/_OpenAPIGeneratorCore/Translator/Operations/OperationDescription.swift index 19d0ae9c..1d8f27b3 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Operations/OperationDescription.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Operations/OperationDescription.swift @@ -25,7 +25,7 @@ struct OperationDescription { var endpoint: OpenAPI.PathItem.Endpoint /// The path parameters at the operation level. - var pathParameters: OpenAPI.Parameter.Array + var pathParameters: ResolvedParameter.Array /// The OpenAPI components, used to resolve JSON references. var components: OpenAPI.Components diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Parameters/TypedParameter.swift b/Sources/_OpenAPIGeneratorCore/Translator/Parameters/TypedParameter.swift index 36b901ce..9dadc8b9 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Parameters/TypedParameter.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Parameters/TypedParameter.swift @@ -17,7 +17,7 @@ import OpenAPIKit30 struct TypedParameter { /// The OpenAPI parameter. - var parameter: OpenAPI.Parameter + var parameter: ResolvedParameter /// The underlying schema. var schema: Either, JSONSchema> @@ -54,7 +54,7 @@ extension TypedParameter { } /// The location of the parameter in the HTTP request. - var location: OpenAPI.Parameter.Context.Location { + var location: ResolvedParameter.Context.Location { parameter.location } @@ -117,7 +117,7 @@ extension FileTranslator { ) throws -> TypedParameter? { // Collect the parameter - let parameter: OpenAPI.Parameter + let parameter: ResolvedParameter switch unresolvedParameter { case let .a(ref): parameter = try components.lookup(ref) @@ -231,7 +231,7 @@ typealias UnresolvedParameter = Either, OpenAPI /// A resolved OpenAPI parameter. typealias ResolvedParameter = OpenAPI.Parameter -extension OpenAPI.Parameter.Context.Location { +extension ResolvedParameter.Context.Location { /// A name of the location usable as a Swift type name. var shortTypeName: String { diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Parameters/translateParameter.swift b/Sources/_OpenAPIGeneratorCore/Translator/Parameters/translateParameter.swift index a70f656a..cbf91b23 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Parameters/translateParameter.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Parameters/translateParameter.swift @@ -60,7 +60,7 @@ extension TypesFileTranslator { componentKey: OpenAPI.ComponentKey, parameter: TypedParameter ) throws -> [Declaration] { - let typeName = TypeAssigner.typeName(for: componentKey, of: OpenAPI.Parameter.self) + let typeName = TypeAssigner.typeName(for: componentKey, of: ResolvedParameter.self) return try translateParameterInTypes( typeName: typeName, parameter: parameter diff --git a/Sources/_OpenAPIGeneratorCore/Translator/ServerTranslator/translateServerMethod.swift b/Sources/_OpenAPIGeneratorCore/Translator/ServerTranslator/translateServerMethod.swift index f6606d1c..31bf6214 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/ServerTranslator/translateServerMethod.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/ServerTranslator/translateServerMethod.swift @@ -24,7 +24,7 @@ extension ServerFileTranslator { let inputTypeName = operation.inputTypeName func locationSpecificInputDecl( - locatedIn location: OpenAPI.Parameter.Context.Location, + locatedIn location: ResolvedParameter.Context.Location, fromParameters parameters: [UnresolvedParameter] ) throws -> Declaration { let variableName = location.shortVariableName @@ -75,7 +75,7 @@ extension ServerFileTranslator { inputMemberDecls.append(bodyDecl) func functionArgumentForLocation( - _ location: OpenAPI.Parameter.Context.Location + _ location: ResolvedParameter.Context.Location ) -> FunctionArgumentDescription { .init( label: location.shortVariableName, diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift index 9ec52291..fa31d054 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift @@ -383,7 +383,7 @@ struct TypeAssigner { /// - `#/components/schemas` -> `JSONSchema` /// - `#/components/responses` -> `OpenAPI.Response` /// - `#/components/callbacks` -> `OpenAPI.Callbacks` - /// - `#/components/parameters` -> `OpenAPI.Parameter` + /// - `#/components/parameters` -> `ResolvedParameter` /// (includes request headers) /// - `#/components/examples` -> `OpenAPI.Example` /// - `#/components/requestBodies` -> `OpenAPI.Request` @@ -460,7 +460,7 @@ fileprivate extension TypeLocation { case .schemas: return TypeAssigner.typeName(for: JSONSchema.self) case .parameters: - return TypeAssigner.typeName(for: OpenAPI.Parameter.self) + return TypeAssigner.typeName(for: ResolvedParameter.self) } } } diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentParameters.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentParameters.swift index 04fadb2f..19689a35 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentParameters.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentParameters.swift @@ -20,7 +20,7 @@ extension TypesFileTranslator { /// - Parameter parameters: The reusable request parameters. /// - Returns: An enum declaration representing the parameters namespace. func translateComponentParameters( - _ parameters: OpenAPI.ComponentDictionary + _ parameters: OpenAPI.ComponentDictionary ) throws -> Declaration { let typedParameters: [(OpenAPI.ComponentKey, TypedParameter)] = @@ -28,7 +28,7 @@ extension TypesFileTranslator { .compactMap { key, parameter in let parent = TypeAssigner.typeName( for: key, - of: OpenAPI.Parameter.self + of: ResolvedParameter.self ) guard let value = try parseAsTypedParameter( @@ -50,7 +50,7 @@ extension TypesFileTranslator { } let componentsParametersEnum = Declaration.commentable( - OpenAPI.Parameter.sectionComment(), + ResolvedParameter.sectionComment(), .enum( accessModifier: config.access, name: Constants.Components.Parameters.namespace, diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateOperations.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateOperations.swift index deb6e15a..49371726 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateOperations.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateOperations.swift @@ -25,7 +25,7 @@ extension TypesFileTranslator { let inputTypeName = description.inputTypeName func propertyBlueprintForNamespacedStruct( - locatedIn location: OpenAPI.Parameter.Context.Location, + locatedIn location: ResolvedParameter.Context.Location, withPropertiesFrom parameters: [UnresolvedParameter] ) throws -> PropertyBlueprint { let inputTypeName = description.inputTypeName diff --git a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift index eac35d38..9d88f1f7 100644 --- a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift +++ b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift @@ -26,7 +26,7 @@ class Test_TypeAssigner: Test_Core { ) ) try XCTAssertEqual( - TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), + TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), newTypeName( swiftFQName: "Components.Parameters.mumble", jsonFQName: "#/components/parameters/mumble" From caa3fc7c0d0f7ada6ab5a7a7f16ec384bb136bb1 Mon Sep 17 00:00:00 2001 From: andrewelliott <> Date: Sun, 18 Jun 2023 21:54:16 -0500 Subject: [PATCH 2/8] Add typealiases Unresolved/ResolvedRequestBody --- .../RequestBody/TypedRequestBody.swift | 16 ++++++++++++---- .../RequestBody/translateRequestBody.swift | 2 +- .../Translator/TypeAssignment/TypeAssigner.swift | 2 +- .../translateComponentRequestBodies.swift | 6 +++--- .../TypeAssignment/Test_TypeAssigner.swift | 2 +- 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/TypedRequestBody.swift b/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/TypedRequestBody.swift index 96986647..06270c11 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/TypedRequestBody.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/TypedRequestBody.swift @@ -17,7 +17,7 @@ import OpenAPIKit30 struct TypedRequestBody { /// The OpenAPI request body. - var request: OpenAPI.Request + var request: ResolvedRequestBody /// The computed type usage. var typeUsage: TypeUsage @@ -55,7 +55,7 @@ extension FileTranslator { /// - Returns: Typed request content; nil if the request body is /// unsupported. func typedRequestBody( - from unresolvedRequest: Either, OpenAPI.Request>, + from unresolvedRequest: UnresolvedRequestBody, inParent parent: TypeName ) throws -> TypedRequestBody? { let type: TypeName @@ -81,10 +81,10 @@ extension FileTranslator { /// unsupported. func typedRequestBody( typeName: TypeName, - from unresolvedRequest: Either, OpenAPI.Request> + from unresolvedRequest: UnresolvedRequestBody ) throws -> TypedRequestBody? { - let request: OpenAPI.Request + let request: ResolvedRequestBody let isInlined: Bool switch unresolvedRequest { case .a(let reference): @@ -113,3 +113,11 @@ extension FileTranslator { ) } } + +/// An unresolved OpenAPI request body. +/// +/// Can be either a reference or an inline request body. +typealias UnresolvedRequestBody = Either, OpenAPI.Request> + +/// A resolved OpenAPI request body. +typealias ResolvedRequestBody = OpenAPI.Request diff --git a/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/translateRequestBody.swift b/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/translateRequestBody.swift index 92aee5f1..cb7ffdb1 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/translateRequestBody.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/translateRequestBody.swift @@ -76,7 +76,7 @@ extension TypesFileTranslator { /// - unresolvedRequestBody: An unresolved request body. /// - parent: The type name of the parent structure. func parseRequestBodyAsProperty( - for unresolvedRequestBody: Either, OpenAPI.Request>?, + for unresolvedRequestBody: UnresolvedRequestBody?, inParent parent: TypeName ) throws -> PropertyBlueprint { let bodyEnumTypeName: TypeName diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift index fa31d054..cd132968 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift @@ -386,7 +386,7 @@ struct TypeAssigner { /// - `#/components/parameters` -> `ResolvedParameter` /// (includes request headers) /// - `#/components/examples` -> `OpenAPI.Example` - /// - `#/components/requestBodies` -> `OpenAPI.Request` + /// - `#/components/requestBodies` -> `ResolvedRequestBody` /// - `#/components/headers` -> `OpenAPI.Header` (response headers) /// - `#/components/securitySchemes` -> `OpenAPI.SecurityScheme` /// - `#/components/links` -> `OpenAPI.Link` diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentRequestBodies.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentRequestBodies.swift index 1c4a55a3..ab8ab2e2 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentRequestBodies.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentRequestBodies.swift @@ -20,7 +20,7 @@ extension TypesFileTranslator { /// - Parameter requestBodies: The reusable request bodies. /// - Returns: An enum declaration representing the requestBodies namespace. func translateComponentRequestBodies( - _ items: OpenAPI.ComponentDictionary + _ items: OpenAPI.ComponentDictionary ) throws -> Declaration { let typedItems: [TypedRequestBody] = @@ -28,7 +28,7 @@ extension TypesFileTranslator { .compactMap { key, item in let typeName = TypeAssigner.typeName( for: key, - of: OpenAPI.Request.self + of: ResolvedRequestBody.self ) return try typedRequestBody( typeName: typeName, @@ -44,7 +44,7 @@ extension TypesFileTranslator { } let componentsEnum = Declaration.commentable( - OpenAPI.Request.sectionComment(), + ResolvedRequestBody.sectionComment(), .enum( accessModifier: config.access, name: Constants.Components.RequestBodies.namespace, diff --git a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift index 9d88f1f7..907b958a 100644 --- a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift +++ b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift @@ -41,7 +41,7 @@ class Test_TypeAssigner: Test_Core { ) try XCTAssertEqual( - TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), + TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), newTypeName( swiftFQName: "Components.RequestBodies.mumble", jsonFQName: "#/components/requestBodies/mumble" From 9dedf86e2e9764fe8f60093c5aa446d495327f96 Mon Sep 17 00:00:00 2001 From: andrewelliott <> Date: Sun, 18 Jun 2023 22:09:12 -0500 Subject: [PATCH 3/8] Add typealiases Unresolved/ResolvedResponse --- .../Translator/Responses/ResponseKind.swift | 4 ++-- .../Translator/Responses/TypedResponse.swift | 12 ++++++++++-- .../Translator/Responses/TypedResponseHeader.swift | 2 +- .../Translator/Responses/translateResponse.swift | 2 +- .../Translator/TypeAssignment/TypeAssigner.swift | 2 +- .../translateComponentResponses.swift | 6 +++--- .../TypeAssignment/Test_TypeAssigner.swift | 2 +- 7 files changed, 19 insertions(+), 11 deletions(-) diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/ResponseKind.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/ResponseKind.swift index c292e549..1b3ef1d0 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/ResponseKind.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/ResponseKind.swift @@ -45,7 +45,7 @@ enum ResponseKind { case _5XX /// Creates a new range that matches the specified OpenAPI range. - init(_ range: OpenAPI.Response.StatusCode.Range) { + init(_ range: ResolvedResponse.StatusCode.Range) { switch range { case .information: self = ._1XX @@ -191,7 +191,7 @@ extension ResponseKind: CustomStringConvertible { } } -extension OpenAPI.Response.StatusCode.Code { +extension ResolvedResponse.StatusCode.Code { /// Returns the matching OpenAPI response kind. var asKind: ResponseKind { diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponse.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponse.swift index 2cfc3e6e..300bf125 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponse.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponse.swift @@ -17,7 +17,7 @@ import OpenAPIKit30 struct TypedResponse { /// The OpenAPI response. - var response: OpenAPI.Response + var response: ResolvedResponse /// The computed type usage. var typeUsage: TypeUsage @@ -39,7 +39,7 @@ extension FileTranslator { ) throws -> TypedResponse { let unresolvedResponse = outcome.response let typeName: TypeName - let response: OpenAPI.Response + let response: ResolvedResponse let isInlined: Bool switch unresolvedResponse { case .a(let reference): @@ -59,3 +59,11 @@ extension FileTranslator { ) } } + +/// An unresolved OpenAPI response. +/// +/// Can be either a reference or an inline response. +typealias UnresolvedResponse = Either, OpenAPI.Response> + +/// A resolved OpenAPI response. +typealias ResolvedResponse = OpenAPI.Response diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift index 7accb2e8..d6423140 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift @@ -65,7 +65,7 @@ extension FileTranslator { /// headers are specified in the OpenAPI document, or if all headers are /// unsupported. func typedResponseHeaders( - from response: OpenAPI.Response, + from response: ResolvedResponse, inParent parent: TypeName ) throws -> [TypedResponseHeader] { guard let headers = response.headers else { diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponse.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponse.swift index 6bc80c7b..3b747e8e 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponse.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponse.swift @@ -128,7 +128,7 @@ extension TypesFileTranslator { ) throws -> Declaration { let typeName = TypeAssigner.typeName( for: componentKey, - of: OpenAPI.Response.self + of: ResolvedResponse.self ) return try translateResponseInTypes( typeName: typeName, diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift index cd132968..0b1da9ec 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift @@ -381,7 +381,7 @@ struct TypeAssigner { /// /// # Mapping /// - `#/components/schemas` -> `JSONSchema` - /// - `#/components/responses` -> `OpenAPI.Response` + /// - `#/components/responses` -> `ResolvedResponse` /// - `#/components/callbacks` -> `OpenAPI.Callbacks` /// - `#/components/parameters` -> `ResolvedParameter` /// (includes request headers) diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentResponses.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentResponses.swift index 1adc9990..fc08a0a6 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentResponses.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentResponses.swift @@ -20,7 +20,7 @@ extension TypesFileTranslator { /// - Parameter responses: The reusable responses. /// - Returns: An enum declaration representing the responses namespace. func translateComponentResponses( - _ responses: OpenAPI.ComponentDictionary + _ responses: OpenAPI.ComponentDictionary ) throws -> Declaration { let typedResponses: [TypedResponse] = @@ -28,7 +28,7 @@ extension TypesFileTranslator { .map { key, response in let typeName = TypeAssigner.typeName( for: key, - of: OpenAPI.Response.self + of: ResolvedResponse.self ) let value = TypedResponse( response: response, @@ -47,7 +47,7 @@ extension TypesFileTranslator { } let componentsResponsesEnum = Declaration.commentable( - OpenAPI.Response.sectionComment(), + ResolvedResponse.sectionComment(), .enum( accessModifier: config.access, name: Constants.Components.Responses.namespace, diff --git a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift index 907b958a..b9730400 100644 --- a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift +++ b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift @@ -49,7 +49,7 @@ class Test_TypeAssigner: Test_Core { ) try XCTAssertEqual( - TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), + TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), newTypeName( swiftFQName: "Components.Responses.mumble", jsonFQName: "#/components/responses/mumble" From d0e147090f14d9b3414ebcbed6b0ebea8b752780 Mon Sep 17 00:00:00 2001 From: andrewelliott <> Date: Sun, 18 Jun 2023 22:21:36 -0500 Subject: [PATCH 4/8] Add typealiases Unresolved/ResolvedResponseHeader --- .../Translator/Responses/TypedResponseHeader.swift | 14 +++++++++++--- .../Responses/translateResponseHeader.swift | 2 +- .../Translator/TypeAssignment/TypeAssigner.swift | 2 +- .../translateComponentHeaders.swift | 6 +++--- .../TypeAssignment/Test_TypeAssigner.swift | 2 +- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift index d6423140..9754aa9d 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift @@ -18,7 +18,7 @@ import OpenAPIKit30 struct TypedResponseHeader { /// The OpenAPI response header. - var header: OpenAPI.Header + var header: ResolvedResponseHeader /// The name of the header. var name: String @@ -87,13 +87,13 @@ extension FileTranslator { /// - parent: The Swift type name of the parent type of the headers. /// - Returns: Typed response header if supported, nil otherwise. func typedResponseHeader( - from unresolvedHeader: Either, OpenAPI.Header>, + from unresolvedHeader: UnresolvedResponseHeader, named name: String, inParent parent: TypeName ) throws -> TypedResponseHeader? { // Collect the header - let header: OpenAPI.Header + let header: ResolvedResponseHeader switch unresolvedHeader { case let .a(ref): header = try components.lookup(ref) @@ -164,3 +164,11 @@ extension FileTranslator { ) } } + +/// An unresolved OpenAPI response header. +/// +/// Can be either a reference or an inline response header. +typealias UnresolvedResponseHeader = Either, OpenAPI.Header> + +/// A resolved OpenAPI response header. +typealias ResolvedResponseHeader = OpenAPI.Header diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponseHeader.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponseHeader.swift index 6ed7166d..fc21cb0c 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponseHeader.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponseHeader.swift @@ -47,7 +47,7 @@ extension TypesFileTranslator { componentKey: OpenAPI.ComponentKey, header: TypedResponseHeader ) throws -> [Declaration] { - let typeName = TypeAssigner.typeName(for: componentKey, of: OpenAPI.Header.self) + let typeName = TypeAssigner.typeName(for: componentKey, of: ResolvedResponseHeader.self) return try translateResponseHeaderInTypes( typeName: typeName, header: header diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift index 0b1da9ec..de770265 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift @@ -387,7 +387,7 @@ struct TypeAssigner { /// (includes request headers) /// - `#/components/examples` -> `OpenAPI.Example` /// - `#/components/requestBodies` -> `ResolvedRequestBody` - /// - `#/components/headers` -> `OpenAPI.Header` (response headers) + /// - `#/components/headers` -> `ResolvedResponseHeader` (response headers) /// - `#/components/securitySchemes` -> `OpenAPI.SecurityScheme` /// - `#/components/links` -> `OpenAPI.Link` /// diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentHeaders.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentHeaders.swift index 81e8b883..7b56c522 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentHeaders.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentHeaders.swift @@ -20,7 +20,7 @@ extension TypesFileTranslator { /// - Parameter headers: The reusable response headers. /// - Returns: An enum declaration representing the headers namespace. func translateComponentHeaders( - _ headers: OpenAPI.ComponentDictionary + _ headers: OpenAPI.ComponentDictionary ) throws -> Declaration { let typedHeaders: [(OpenAPI.ComponentKey, TypedResponseHeader)] = @@ -28,7 +28,7 @@ extension TypesFileTranslator { .compactMap { key, header in let parent = TypeAssigner.typeName( for: key, - of: OpenAPI.Header.self + of: ResolvedResponseHeader.self ) guard let value = try typedResponseHeader( @@ -51,7 +51,7 @@ extension TypesFileTranslator { } let componentsParametersEnum = Declaration.commentable( - OpenAPI.Header.sectionComment(), + ResolvedResponseHeader.sectionComment(), .enum( accessModifier: config.access, name: Constants.Components.Headers.namespace, diff --git a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift index b9730400..540740dc 100644 --- a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift +++ b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift @@ -33,7 +33,7 @@ class Test_TypeAssigner: Test_Core { ) ) try XCTAssertEqual( - TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), + TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), newTypeName( swiftFQName: "Components.Headers.mumble", jsonFQName: "#/components/headers/mumble" From 4623905471e433b2f1fa2729131779c1cadfc0fe Mon Sep 17 00:00:00 2001 From: andrewelliott <> Date: Sun, 18 Jun 2023 22:49:46 -0500 Subject: [PATCH 5/8] Add typealias UnresolvedSchema --- .../Translator/CommonTranslations/translateSchema.swift | 2 +- .../Translator/Content/SchemaContent.swift | 7 ++++++- .../Translator/Parameters/TypedParameter.swift | 6 +++--- .../Translator/Responses/TypedResponseHeader.swift | 4 ++-- .../Translator/TypeAssignment/TypeAssigner.swift | 2 +- .../Translator/TypeAssignment/TypeMatcher.swift | 4 ++-- .../Translator/TypeAssignment/isSchemaSupported.swift | 4 ++-- 7 files changed, 17 insertions(+), 12 deletions(-) diff --git a/Sources/_OpenAPIGeneratorCore/Translator/CommonTranslations/translateSchema.swift b/Sources/_OpenAPIGeneratorCore/Translator/CommonTranslations/translateSchema.swift index 266ed90b..93f9ffe9 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/CommonTranslations/translateSchema.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/CommonTranslations/translateSchema.swift @@ -30,7 +30,7 @@ extension FileTranslator { /// instead of extracted from the schema. func translateSchema( typeName: TypeName, - schema: Either, JSONSchema>?, + schema: UnresolvedSchema?, overrides: SchemaOverrides ) throws -> [Declaration] { let unwrappedSchema: JSONSchema diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Content/SchemaContent.swift b/Sources/_OpenAPIGeneratorCore/Translator/Content/SchemaContent.swift index 9fe054ea..a3e1fa6e 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Content/SchemaContent.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Content/SchemaContent.swift @@ -24,7 +24,7 @@ struct SchemaContent { /// /// Can be nil for unstructured JSON payloads, or for unstructured /// content types such as binary data. - var schema: Either, JSONSchema>? + var schema: UnresolvedSchema? } /// A type grouping schema content and its computed Swift type usage. @@ -44,3 +44,8 @@ struct TypedSchemaContent { typeUsage ?? TypeName.valueContainer.asUsage } } + +/// An unresolved OpenAPI schema. +/// +/// Can be either a reference or an inline schema. +typealias UnresolvedSchema = Either, JSONSchema> diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Parameters/TypedParameter.swift b/Sources/_OpenAPIGeneratorCore/Translator/Parameters/TypedParameter.swift index 9dadc8b9..5348e4a3 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Parameters/TypedParameter.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Parameters/TypedParameter.swift @@ -20,7 +20,7 @@ struct TypedParameter { var parameter: ResolvedParameter /// The underlying schema. - var schema: Either, JSONSchema> + var schema: UnresolvedSchema /// The computed type usage. var typeUsage: TypeUsage @@ -66,7 +66,7 @@ extension TypedParameter { } } -extension Either where A == JSONReference, B == JSONSchema { +extension UnresolvedSchema { /// A schema to be inlined. /// @@ -128,7 +128,7 @@ extension FileTranslator { let locationTypeName = parameter.location.typeName(in: parent) let foundIn = "\(locationTypeName.description)/\(parameter.name)" - let schema: Either, JSONSchema> + let schema: UnresolvedSchema let codingStrategy: CodingStrategy switch parameter.schemaOrContent { case let .a(schemaContext): diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift index 9754aa9d..02d9896b 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift @@ -24,7 +24,7 @@ struct TypedResponseHeader { var name: String /// The underlying schema. - var schema: Either, JSONSchema> + var schema: UnresolvedSchema /// The Swift type representing the response header. var typeUsage: TypeUsage @@ -103,7 +103,7 @@ extension FileTranslator { let foundIn = "\(parent.description)/\(name)" - let schema: Either, JSONSchema> + let schema: UnresolvedSchema let codingStrategy: CodingStrategy switch header.schemaOrContent { diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift index de770265..ffdc4e53 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift @@ -73,7 +73,7 @@ struct TypeAssigner { /// - Returns: A type usage; or nil if the schema is nil or unsupported. static func typeUsage( usingNamingHint hint: String, - withSchema schema: Either, JSONSchema>?, + withSchema schema: UnresolvedSchema?, inParent parent: TypeName ) throws -> TypeUsage? { let associatedType: TypeUsage? diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeMatcher.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeMatcher.swift index e65dc90b..47f30051 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeMatcher.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeMatcher.swift @@ -125,7 +125,7 @@ struct TypeMatcher { /// - Parameter schema: The schema to match a referenceable type for. /// - Returns: `true` if the schema is referenceable; `false` otherwise. static func isReferenceable( - _ schema: Either, JSONSchema>? + _ schema: UnresolvedSchema? ) -> Bool { guard let schema else { // fragment type is referenceable @@ -163,7 +163,7 @@ struct TypeMatcher { /// - Parameter schema: The schema to match a referenceable type for. /// - Returns: `true` if the schema is inlinable; `false` otherwise. static func isInlinable( - _ schema: Either, JSONSchema>? + _ schema: UnresolvedSchema? ) -> Bool { !isReferenceable(schema) } diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/isSchemaSupported.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/isSchemaSupported.swift index b16a7873..cce97211 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/isSchemaSupported.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/isSchemaSupported.swift @@ -41,7 +41,7 @@ extension FileTranslator { /// - foundIn: A description of the schema's context. /// - Returns: `true` if the schema is supported; `false` otherwise. func validateSchemaIsSupported( - _ schema: Either, JSONSchema>?, + _ schema: UnresolvedSchema?, foundIn: String ) throws -> Bool { guard try isSchemaSupported(schema) else { @@ -116,7 +116,7 @@ extension FileTranslator { /// - schema: The schema to validate. /// - Returns: `true` if the schema is supported; `false` otherwise. func isSchemaSupported( - _ schema: Either, JSONSchema>? + _ schema: UnresolvedSchema? ) throws -> Bool { guard let schema else { // fragment type is supported From fc57f93085feb04d6cee719e98ea46fd6a20d4c3 Mon Sep 17 00:00:00 2001 From: andrewelliott <> Date: Sun, 18 Jun 2023 22:56:24 -0500 Subject: [PATCH 6/8] Rename typealiases Unresolved/ResolvedRequest --- .../RequestBody/TypedRequestBody.swift | 18 +++++++++--------- .../RequestBody/translateRequestBody.swift | 2 +- .../translateComponentRequestBodies.swift | 6 +++--- .../TypeAssignment/Test_TypeAssigner.swift | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/TypedRequestBody.swift b/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/TypedRequestBody.swift index 06270c11..a1efeeed 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/TypedRequestBody.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/TypedRequestBody.swift @@ -17,7 +17,7 @@ import OpenAPIKit30 struct TypedRequestBody { /// The OpenAPI request body. - var request: ResolvedRequestBody + var request: ResolvedRequest /// The computed type usage. var typeUsage: TypeUsage @@ -55,7 +55,7 @@ extension FileTranslator { /// - Returns: Typed request content; nil if the request body is /// unsupported. func typedRequestBody( - from unresolvedRequest: UnresolvedRequestBody, + from unresolvedRequest: UnresolvedRequest, inParent parent: TypeName ) throws -> TypedRequestBody? { let type: TypeName @@ -81,10 +81,10 @@ extension FileTranslator { /// unsupported. func typedRequestBody( typeName: TypeName, - from unresolvedRequest: UnresolvedRequestBody + from unresolvedRequest: UnresolvedRequest ) throws -> TypedRequestBody? { - let request: ResolvedRequestBody + let request: ResolvedRequest let isInlined: Bool switch unresolvedRequest { case .a(let reference): @@ -114,10 +114,10 @@ extension FileTranslator { } } -/// An unresolved OpenAPI request body. +/// An unresolved OpenAPI request. /// -/// Can be either a reference or an inline request body. -typealias UnresolvedRequestBody = Either, OpenAPI.Request> +/// Can be either a reference or an inline request. +typealias UnresolvedRequest = Either, OpenAPI.Request> -/// A resolved OpenAPI request body. -typealias ResolvedRequestBody = OpenAPI.Request +/// A resolved OpenAPI request. +typealias ResolvedRequest = OpenAPI.Request diff --git a/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/translateRequestBody.swift b/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/translateRequestBody.swift index cb7ffdb1..c109ed67 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/translateRequestBody.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/translateRequestBody.swift @@ -76,7 +76,7 @@ extension TypesFileTranslator { /// - unresolvedRequestBody: An unresolved request body. /// - parent: The type name of the parent structure. func parseRequestBodyAsProperty( - for unresolvedRequestBody: UnresolvedRequestBody?, + for unresolvedRequestBody: UnresolvedRequest?, inParent parent: TypeName ) throws -> PropertyBlueprint { let bodyEnumTypeName: TypeName diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentRequestBodies.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentRequestBodies.swift index ab8ab2e2..4cc5c653 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentRequestBodies.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentRequestBodies.swift @@ -20,7 +20,7 @@ extension TypesFileTranslator { /// - Parameter requestBodies: The reusable request bodies. /// - Returns: An enum declaration representing the requestBodies namespace. func translateComponentRequestBodies( - _ items: OpenAPI.ComponentDictionary + _ items: OpenAPI.ComponentDictionary ) throws -> Declaration { let typedItems: [TypedRequestBody] = @@ -28,7 +28,7 @@ extension TypesFileTranslator { .compactMap { key, item in let typeName = TypeAssigner.typeName( for: key, - of: ResolvedRequestBody.self + of: ResolvedRequest.self ) return try typedRequestBody( typeName: typeName, @@ -44,7 +44,7 @@ extension TypesFileTranslator { } let componentsEnum = Declaration.commentable( - ResolvedRequestBody.sectionComment(), + ResolvedRequest.sectionComment(), .enum( accessModifier: config.access, name: Constants.Components.RequestBodies.namespace, diff --git a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift index 540740dc..46ce9aa7 100644 --- a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift +++ b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift @@ -41,7 +41,7 @@ class Test_TypeAssigner: Test_Core { ) try XCTAssertEqual( - TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), + TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), newTypeName( swiftFQName: "Components.RequestBodies.mumble", jsonFQName: "#/components/requestBodies/mumble" From 06afda0a614e0cde28d26860dcea2a830ed7c0fb Mon Sep 17 00:00:00 2001 From: andrewelliott <> Date: Sun, 18 Jun 2023 22:59:38 -0500 Subject: [PATCH 7/8] Rename typealiases Unresolved/ResolvedHeader --- .../Translator/Responses/TypedResponseHeader.swift | 10 +++++----- .../Translator/Responses/translateResponseHeader.swift | 2 +- .../Translator/TypeAssignment/TypeAssigner.swift | 4 ++-- .../TypesTranslator/translateComponentHeaders.swift | 6 +++--- .../Translator/TypeAssignment/Test_TypeAssigner.swift | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift index 02d9896b..ec00f896 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift @@ -18,7 +18,7 @@ import OpenAPIKit30 struct TypedResponseHeader { /// The OpenAPI response header. - var header: ResolvedResponseHeader + var header: ResolvedHeader /// The name of the header. var name: String @@ -87,13 +87,13 @@ extension FileTranslator { /// - parent: The Swift type name of the parent type of the headers. /// - Returns: Typed response header if supported, nil otherwise. func typedResponseHeader( - from unresolvedHeader: UnresolvedResponseHeader, + from unresolvedHeader: UnresolvedHeader, named name: String, inParent parent: TypeName ) throws -> TypedResponseHeader? { // Collect the header - let header: ResolvedResponseHeader + let header: ResolvedHeader switch unresolvedHeader { case let .a(ref): header = try components.lookup(ref) @@ -168,7 +168,7 @@ extension FileTranslator { /// An unresolved OpenAPI response header. /// /// Can be either a reference or an inline response header. -typealias UnresolvedResponseHeader = Either, OpenAPI.Header> +typealias UnresolvedHeader = Either, OpenAPI.Header> /// A resolved OpenAPI response header. -typealias ResolvedResponseHeader = OpenAPI.Header +typealias ResolvedHeader = OpenAPI.Header diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponseHeader.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponseHeader.swift index fc21cb0c..51cf6226 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponseHeader.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponseHeader.swift @@ -47,7 +47,7 @@ extension TypesFileTranslator { componentKey: OpenAPI.ComponentKey, header: TypedResponseHeader ) throws -> [Declaration] { - let typeName = TypeAssigner.typeName(for: componentKey, of: ResolvedResponseHeader.self) + let typeName = TypeAssigner.typeName(for: componentKey, of: ResolvedHeader.self) return try translateResponseHeaderInTypes( typeName: typeName, header: header diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift index ffdc4e53..99ad4ab1 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift @@ -386,8 +386,8 @@ struct TypeAssigner { /// - `#/components/parameters` -> `ResolvedParameter` /// (includes request headers) /// - `#/components/examples` -> `OpenAPI.Example` - /// - `#/components/requestBodies` -> `ResolvedRequestBody` - /// - `#/components/headers` -> `ResolvedResponseHeader` (response headers) + /// - `#/components/requestBodies` -> `ResolvedRequest` + /// - `#/components/headers` -> `ResolvedHeader` (response headers) /// - `#/components/securitySchemes` -> `OpenAPI.SecurityScheme` /// - `#/components/links` -> `OpenAPI.Link` /// diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentHeaders.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentHeaders.swift index 7b56c522..d83f86db 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentHeaders.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentHeaders.swift @@ -20,7 +20,7 @@ extension TypesFileTranslator { /// - Parameter headers: The reusable response headers. /// - Returns: An enum declaration representing the headers namespace. func translateComponentHeaders( - _ headers: OpenAPI.ComponentDictionary + _ headers: OpenAPI.ComponentDictionary ) throws -> Declaration { let typedHeaders: [(OpenAPI.ComponentKey, TypedResponseHeader)] = @@ -28,7 +28,7 @@ extension TypesFileTranslator { .compactMap { key, header in let parent = TypeAssigner.typeName( for: key, - of: ResolvedResponseHeader.self + of: ResolvedHeader.self ) guard let value = try typedResponseHeader( @@ -51,7 +51,7 @@ extension TypesFileTranslator { } let componentsParametersEnum = Declaration.commentable( - ResolvedResponseHeader.sectionComment(), + ResolvedHeader.sectionComment(), .enum( accessModifier: config.access, name: Constants.Components.Headers.namespace, diff --git a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift index 46ce9aa7..1785e81c 100644 --- a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift +++ b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift @@ -33,7 +33,7 @@ class Test_TypeAssigner: Test_Core { ) ) try XCTAssertEqual( - TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), + TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), newTypeName( swiftFQName: "Components.Headers.mumble", jsonFQName: "#/components/headers/mumble" From 0a6f78fa678d41c9d22eb0485a4b4e03adcb20dd Mon Sep 17 00:00:00 2001 From: andrewelliott <> Date: Mon, 19 Jun 2023 01:10:36 -0500 Subject: [PATCH 8/8] Remove Resolved* typealiases --- .../Translator/Operations/OperationDescription.swift | 4 ++-- .../Translator/Parameters/TypedParameter.swift | 11 ++++------- .../Translator/Parameters/translateParameter.swift | 2 +- .../Translator/RequestBody/TypedRequestBody.swift | 7 ++----- .../Translator/Responses/ResponseKind.swift | 4 ++-- .../Translator/Responses/TypedResponse.swift | 7 ++----- .../Translator/Responses/TypedResponseHeader.swift | 9 +++------ .../Translator/Responses/translateResponse.swift | 2 +- .../Responses/translateResponseHeader.swift | 2 +- .../ServerTranslator/translateServerMethod.swift | 4 ++-- .../Translator/TypeAssignment/TypeAssigner.swift | 10 +++++----- .../TypesTranslator/translateComponentHeaders.swift | 6 +++--- .../translateComponentParameters.swift | 6 +++--- .../translateComponentRequestBodies.swift | 6 +++--- .../TypesTranslator/translateComponentResponses.swift | 6 +++--- .../TypesTranslator/translateOperations.swift | 2 +- .../Translator/TypeAssignment/Test_TypeAssigner.swift | 8 ++++---- 17 files changed, 42 insertions(+), 54 deletions(-) diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Operations/OperationDescription.swift b/Sources/_OpenAPIGeneratorCore/Translator/Operations/OperationDescription.swift index 1d8f27b3..788684ce 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Operations/OperationDescription.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Operations/OperationDescription.swift @@ -25,7 +25,7 @@ struct OperationDescription { var endpoint: OpenAPI.PathItem.Endpoint /// The path parameters at the operation level. - var pathParameters: ResolvedParameter.Array + var pathParameters: OpenAPI.Parameter.Array /// The OpenAPI components, used to resolve JSON references. var components: OpenAPI.Components @@ -138,7 +138,7 @@ extension OperationDescription { /// Returns all parameters by resolving any parameter references first. /// /// - Throws: When an invalid JSON reference is found. - var allResolvedParameters: [ResolvedParameter] { + var allResolvedParameters: [OpenAPI.Parameter] { get throws { try allParameters.map { try $0.resolve(in: components) } } diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Parameters/TypedParameter.swift b/Sources/_OpenAPIGeneratorCore/Translator/Parameters/TypedParameter.swift index 5348e4a3..7f9047bf 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Parameters/TypedParameter.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Parameters/TypedParameter.swift @@ -17,7 +17,7 @@ import OpenAPIKit30 struct TypedParameter { /// The OpenAPI parameter. - var parameter: ResolvedParameter + var parameter: OpenAPI.Parameter /// The underlying schema. var schema: UnresolvedSchema @@ -54,7 +54,7 @@ extension TypedParameter { } /// The location of the parameter in the HTTP request. - var location: ResolvedParameter.Context.Location { + var location: OpenAPI.Parameter.Context.Location { parameter.location } @@ -117,7 +117,7 @@ extension FileTranslator { ) throws -> TypedParameter? { // Collect the parameter - let parameter: ResolvedParameter + let parameter: OpenAPI.Parameter switch unresolvedParameter { case let .a(ref): parameter = try components.lookup(ref) @@ -228,10 +228,7 @@ extension FileTranslator { /// Can be either a reference or an inline parameter. typealias UnresolvedParameter = Either, OpenAPI.Parameter> -/// A resolved OpenAPI parameter. -typealias ResolvedParameter = OpenAPI.Parameter - -extension ResolvedParameter.Context.Location { +extension OpenAPI.Parameter.Context.Location { /// A name of the location usable as a Swift type name. var shortTypeName: String { diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Parameters/translateParameter.swift b/Sources/_OpenAPIGeneratorCore/Translator/Parameters/translateParameter.swift index cbf91b23..a70f656a 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Parameters/translateParameter.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Parameters/translateParameter.swift @@ -60,7 +60,7 @@ extension TypesFileTranslator { componentKey: OpenAPI.ComponentKey, parameter: TypedParameter ) throws -> [Declaration] { - let typeName = TypeAssigner.typeName(for: componentKey, of: ResolvedParameter.self) + let typeName = TypeAssigner.typeName(for: componentKey, of: OpenAPI.Parameter.self) return try translateParameterInTypes( typeName: typeName, parameter: parameter diff --git a/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/TypedRequestBody.swift b/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/TypedRequestBody.swift index a1efeeed..02f69110 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/TypedRequestBody.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/RequestBody/TypedRequestBody.swift @@ -17,7 +17,7 @@ import OpenAPIKit30 struct TypedRequestBody { /// The OpenAPI request body. - var request: ResolvedRequest + var request: OpenAPI.Request /// The computed type usage. var typeUsage: TypeUsage @@ -84,7 +84,7 @@ extension FileTranslator { from unresolvedRequest: UnresolvedRequest ) throws -> TypedRequestBody? { - let request: ResolvedRequest + let request: OpenAPI.Request let isInlined: Bool switch unresolvedRequest { case .a(let reference): @@ -118,6 +118,3 @@ extension FileTranslator { /// /// Can be either a reference or an inline request. typealias UnresolvedRequest = Either, OpenAPI.Request> - -/// A resolved OpenAPI request. -typealias ResolvedRequest = OpenAPI.Request diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/ResponseKind.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/ResponseKind.swift index 1b3ef1d0..c292e549 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/ResponseKind.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/ResponseKind.swift @@ -45,7 +45,7 @@ enum ResponseKind { case _5XX /// Creates a new range that matches the specified OpenAPI range. - init(_ range: ResolvedResponse.StatusCode.Range) { + init(_ range: OpenAPI.Response.StatusCode.Range) { switch range { case .information: self = ._1XX @@ -191,7 +191,7 @@ extension ResponseKind: CustomStringConvertible { } } -extension ResolvedResponse.StatusCode.Code { +extension OpenAPI.Response.StatusCode.Code { /// Returns the matching OpenAPI response kind. var asKind: ResponseKind { diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponse.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponse.swift index 300bf125..3eaf128d 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponse.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponse.swift @@ -17,7 +17,7 @@ import OpenAPIKit30 struct TypedResponse { /// The OpenAPI response. - var response: ResolvedResponse + var response: OpenAPI.Response /// The computed type usage. var typeUsage: TypeUsage @@ -39,7 +39,7 @@ extension FileTranslator { ) throws -> TypedResponse { let unresolvedResponse = outcome.response let typeName: TypeName - let response: ResolvedResponse + let response: OpenAPI.Response let isInlined: Bool switch unresolvedResponse { case .a(let reference): @@ -64,6 +64,3 @@ extension FileTranslator { /// /// Can be either a reference or an inline response. typealias UnresolvedResponse = Either, OpenAPI.Response> - -/// A resolved OpenAPI response. -typealias ResolvedResponse = OpenAPI.Response diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift index ec00f896..23901d0b 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/TypedResponseHeader.swift @@ -18,7 +18,7 @@ import OpenAPIKit30 struct TypedResponseHeader { /// The OpenAPI response header. - var header: ResolvedHeader + var header: OpenAPI.Header /// The name of the header. var name: String @@ -65,7 +65,7 @@ extension FileTranslator { /// headers are specified in the OpenAPI document, or if all headers are /// unsupported. func typedResponseHeaders( - from response: ResolvedResponse, + from response: OpenAPI.Response, inParent parent: TypeName ) throws -> [TypedResponseHeader] { guard let headers = response.headers else { @@ -93,7 +93,7 @@ extension FileTranslator { ) throws -> TypedResponseHeader? { // Collect the header - let header: ResolvedHeader + let header: OpenAPI.Header switch unresolvedHeader { case let .a(ref): header = try components.lookup(ref) @@ -169,6 +169,3 @@ extension FileTranslator { /// /// Can be either a reference or an inline response header. typealias UnresolvedHeader = Either, OpenAPI.Header> - -/// A resolved OpenAPI response header. -typealias ResolvedHeader = OpenAPI.Header diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponse.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponse.swift index 3b747e8e..6bc80c7b 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponse.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponse.swift @@ -128,7 +128,7 @@ extension TypesFileTranslator { ) throws -> Declaration { let typeName = TypeAssigner.typeName( for: componentKey, - of: ResolvedResponse.self + of: OpenAPI.Response.self ) return try translateResponseInTypes( typeName: typeName, diff --git a/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponseHeader.swift b/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponseHeader.swift index 51cf6226..6ed7166d 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponseHeader.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/Responses/translateResponseHeader.swift @@ -47,7 +47,7 @@ extension TypesFileTranslator { componentKey: OpenAPI.ComponentKey, header: TypedResponseHeader ) throws -> [Declaration] { - let typeName = TypeAssigner.typeName(for: componentKey, of: ResolvedHeader.self) + let typeName = TypeAssigner.typeName(for: componentKey, of: OpenAPI.Header.self) return try translateResponseHeaderInTypes( typeName: typeName, header: header diff --git a/Sources/_OpenAPIGeneratorCore/Translator/ServerTranslator/translateServerMethod.swift b/Sources/_OpenAPIGeneratorCore/Translator/ServerTranslator/translateServerMethod.swift index 31bf6214..f6606d1c 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/ServerTranslator/translateServerMethod.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/ServerTranslator/translateServerMethod.swift @@ -24,7 +24,7 @@ extension ServerFileTranslator { let inputTypeName = operation.inputTypeName func locationSpecificInputDecl( - locatedIn location: ResolvedParameter.Context.Location, + locatedIn location: OpenAPI.Parameter.Context.Location, fromParameters parameters: [UnresolvedParameter] ) throws -> Declaration { let variableName = location.shortVariableName @@ -75,7 +75,7 @@ extension ServerFileTranslator { inputMemberDecls.append(bodyDecl) func functionArgumentForLocation( - _ location: ResolvedParameter.Context.Location + _ location: OpenAPI.Parameter.Context.Location ) -> FunctionArgumentDescription { .init( label: location.shortVariableName, diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift index 99ad4ab1..caddf165 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypeAssignment/TypeAssigner.swift @@ -381,13 +381,13 @@ struct TypeAssigner { /// /// # Mapping /// - `#/components/schemas` -> `JSONSchema` - /// - `#/components/responses` -> `ResolvedResponse` + /// - `#/components/responses` -> `OpenAPI.Response` /// - `#/components/callbacks` -> `OpenAPI.Callbacks` - /// - `#/components/parameters` -> `ResolvedParameter` + /// - `#/components/parameters` -> `OpenAPI.Parameter` /// (includes request headers) /// - `#/components/examples` -> `OpenAPI.Example` - /// - `#/components/requestBodies` -> `ResolvedRequest` - /// - `#/components/headers` -> `ResolvedHeader` (response headers) + /// - `#/components/requestBodies` -> `OpenAPI.Request` + /// - `#/components/headers` -> `OpenAPI.Header` (response headers) /// - `#/components/securitySchemes` -> `OpenAPI.SecurityScheme` /// - `#/components/links` -> `OpenAPI.Link` /// @@ -460,7 +460,7 @@ fileprivate extension TypeLocation { case .schemas: return TypeAssigner.typeName(for: JSONSchema.self) case .parameters: - return TypeAssigner.typeName(for: ResolvedParameter.self) + return TypeAssigner.typeName(for: OpenAPI.Parameter.self) } } } diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentHeaders.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentHeaders.swift index d83f86db..81e8b883 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentHeaders.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentHeaders.swift @@ -20,7 +20,7 @@ extension TypesFileTranslator { /// - Parameter headers: The reusable response headers. /// - Returns: An enum declaration representing the headers namespace. func translateComponentHeaders( - _ headers: OpenAPI.ComponentDictionary + _ headers: OpenAPI.ComponentDictionary ) throws -> Declaration { let typedHeaders: [(OpenAPI.ComponentKey, TypedResponseHeader)] = @@ -28,7 +28,7 @@ extension TypesFileTranslator { .compactMap { key, header in let parent = TypeAssigner.typeName( for: key, - of: ResolvedHeader.self + of: OpenAPI.Header.self ) guard let value = try typedResponseHeader( @@ -51,7 +51,7 @@ extension TypesFileTranslator { } let componentsParametersEnum = Declaration.commentable( - ResolvedHeader.sectionComment(), + OpenAPI.Header.sectionComment(), .enum( accessModifier: config.access, name: Constants.Components.Headers.namespace, diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentParameters.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentParameters.swift index 19689a35..04fadb2f 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentParameters.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentParameters.swift @@ -20,7 +20,7 @@ extension TypesFileTranslator { /// - Parameter parameters: The reusable request parameters. /// - Returns: An enum declaration representing the parameters namespace. func translateComponentParameters( - _ parameters: OpenAPI.ComponentDictionary + _ parameters: OpenAPI.ComponentDictionary ) throws -> Declaration { let typedParameters: [(OpenAPI.ComponentKey, TypedParameter)] = @@ -28,7 +28,7 @@ extension TypesFileTranslator { .compactMap { key, parameter in let parent = TypeAssigner.typeName( for: key, - of: ResolvedParameter.self + of: OpenAPI.Parameter.self ) guard let value = try parseAsTypedParameter( @@ -50,7 +50,7 @@ extension TypesFileTranslator { } let componentsParametersEnum = Declaration.commentable( - ResolvedParameter.sectionComment(), + OpenAPI.Parameter.sectionComment(), .enum( accessModifier: config.access, name: Constants.Components.Parameters.namespace, diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentRequestBodies.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentRequestBodies.swift index 4cc5c653..1c4a55a3 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentRequestBodies.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentRequestBodies.swift @@ -20,7 +20,7 @@ extension TypesFileTranslator { /// - Parameter requestBodies: The reusable request bodies. /// - Returns: An enum declaration representing the requestBodies namespace. func translateComponentRequestBodies( - _ items: OpenAPI.ComponentDictionary + _ items: OpenAPI.ComponentDictionary ) throws -> Declaration { let typedItems: [TypedRequestBody] = @@ -28,7 +28,7 @@ extension TypesFileTranslator { .compactMap { key, item in let typeName = TypeAssigner.typeName( for: key, - of: ResolvedRequest.self + of: OpenAPI.Request.self ) return try typedRequestBody( typeName: typeName, @@ -44,7 +44,7 @@ extension TypesFileTranslator { } let componentsEnum = Declaration.commentable( - ResolvedRequest.sectionComment(), + OpenAPI.Request.sectionComment(), .enum( accessModifier: config.access, name: Constants.Components.RequestBodies.namespace, diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentResponses.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentResponses.swift index fc08a0a6..1adc9990 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentResponses.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateComponentResponses.swift @@ -20,7 +20,7 @@ extension TypesFileTranslator { /// - Parameter responses: The reusable responses. /// - Returns: An enum declaration representing the responses namespace. func translateComponentResponses( - _ responses: OpenAPI.ComponentDictionary + _ responses: OpenAPI.ComponentDictionary ) throws -> Declaration { let typedResponses: [TypedResponse] = @@ -28,7 +28,7 @@ extension TypesFileTranslator { .map { key, response in let typeName = TypeAssigner.typeName( for: key, - of: ResolvedResponse.self + of: OpenAPI.Response.self ) let value = TypedResponse( response: response, @@ -47,7 +47,7 @@ extension TypesFileTranslator { } let componentsResponsesEnum = Declaration.commentable( - ResolvedResponse.sectionComment(), + OpenAPI.Response.sectionComment(), .enum( accessModifier: config.access, name: Constants.Components.Responses.namespace, diff --git a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateOperations.swift b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateOperations.swift index 49371726..deb6e15a 100644 --- a/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateOperations.swift +++ b/Sources/_OpenAPIGeneratorCore/Translator/TypesTranslator/translateOperations.swift @@ -25,7 +25,7 @@ extension TypesFileTranslator { let inputTypeName = description.inputTypeName func propertyBlueprintForNamespacedStruct( - locatedIn location: ResolvedParameter.Context.Location, + locatedIn location: OpenAPI.Parameter.Context.Location, withPropertiesFrom parameters: [UnresolvedParameter] ) throws -> PropertyBlueprint { let inputTypeName = description.inputTypeName diff --git a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift index 1785e81c..eac35d38 100644 --- a/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift +++ b/Tests/OpenAPIGeneratorCoreTests/Translator/TypeAssignment/Test_TypeAssigner.swift @@ -26,14 +26,14 @@ class Test_TypeAssigner: Test_Core { ) ) try XCTAssertEqual( - TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), + TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), newTypeName( swiftFQName: "Components.Parameters.mumble", jsonFQName: "#/components/parameters/mumble" ) ) try XCTAssertEqual( - TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), + TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), newTypeName( swiftFQName: "Components.Headers.mumble", jsonFQName: "#/components/headers/mumble" @@ -41,7 +41,7 @@ class Test_TypeAssigner: Test_Core { ) try XCTAssertEqual( - TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), + TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), newTypeName( swiftFQName: "Components.RequestBodies.mumble", jsonFQName: "#/components/requestBodies/mumble" @@ -49,7 +49,7 @@ class Test_TypeAssigner: Test_Core { ) try XCTAssertEqual( - TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), + TypeAssigner.typeName(for: JSONReference.component(named: "mumble")), newTypeName( swiftFQName: "Components.Responses.mumble", jsonFQName: "#/components/responses/mumble"