Skip to content

Commit d93e243

Browse files
authored
chore: refactor middleware handler generation (#453)
1 parent 9db7498 commit d93e243

File tree

7 files changed

+44
-43
lines changed

7 files changed

+44
-43
lines changed

AWSClientRuntime/Sources/Regions/ProfileRegionResolver.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public struct ProfileRegionProvider: RegionProvider {
1818
self.logger = SwiftLogger(label: "ProfileRegionResolver")
1919
}
2020

21-
//TODO: expose these config fields up to the sdk so customer can override path and profile name
21+
// TODO: expose these config fields up to the sdk so customer can override path and profile name
2222
public init(path: String = "~/.aws/config", profileName: String = "default") {
2323
let profileCollection = CRTAWSProfileCollection(fromFile: path, source: .config)
2424

codegen/smithy-aws-swift-codegen/src/main/kotlin/software/amazon/smithy/aws/swift/codegen/awsquery/AwsQueryProtocolGenerator.kt

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,17 @@ package software.amazon.smithy.aws.swift.codegen.awsquery
88
import software.amazon.smithy.aws.swift.codegen.AWSHttpBindingProtocolGenerator
99
import software.amazon.smithy.aws.swift.codegen.AWSHttpProtocolClientCustomizableFactory
1010
import software.amazon.smithy.aws.swift.codegen.FormURLHttpBindingResolver
11-
import software.amazon.smithy.aws.swift.codegen.middleware.FormURLHttpBodyMiddleware
1211
import software.amazon.smithy.aws.swift.codegen.restxml.AWSRestXMLHttpResponseBindingErrorGenerator
1312
import software.amazon.smithy.aws.swift.codegen.restxml.AWSXMLHttpResponseBindingErrorInitGeneratorFactory
1413
import software.amazon.smithy.aws.traits.protocols.AwsQueryTrait
15-
import software.amazon.smithy.codegen.core.Symbol
1614
import software.amazon.smithy.model.shapes.MemberShape
1715
import software.amazon.smithy.model.shapes.OperationShape
1816
import software.amazon.smithy.model.shapes.Shape
1917
import software.amazon.smithy.model.shapes.ShapeId
2018
import software.amazon.smithy.model.traits.TimestampFormatTrait
21-
import software.amazon.smithy.swift.codegen.Middleware
2219
import software.amazon.smithy.swift.codegen.SwiftWriter
23-
import software.amazon.smithy.swift.codegen.integration.HttpBindingDescriptor
2420
import software.amazon.smithy.swift.codegen.integration.HttpBindingResolver
21+
import software.amazon.smithy.swift.codegen.integration.HttpProtocolBodyMiddlewareGeneratorFactory
2522
import software.amazon.smithy.swift.codegen.integration.HttpProtocolUnitTestGenerator
2623
import software.amazon.smithy.swift.codegen.integration.ProtocolGenerator
2724
import software.amazon.smithy.swift.codegen.integration.codingKeys.CodingKeysCustomizationXmlName
@@ -80,20 +77,10 @@ open class AwsQueryProtocolGenerator : AWSHttpBindingProtocolGenerator() {
8077
decoder.render()
8178
}
8279

83-
override fun shouldRenderHttpBodyMiddleware(shape: Shape): Boolean {
84-
return true
80+
override fun httpProtocolBodyMiddleware(): HttpProtocolBodyMiddlewareGeneratorFactory {
81+
return FormURLBodyMiddlewareGeneratorFactory()
8582
}
8683

87-
override fun httpBodyMiddleware(
88-
writer: SwiftWriter,
89-
ctx: ProtocolGenerator.GenerationContext,
90-
inputSymbol: Symbol,
91-
outputSymbol: Symbol,
92-
outputErrorSymbol: Symbol,
93-
requestBindings: List<HttpBindingDescriptor>
94-
): Middleware {
95-
return FormURLHttpBodyMiddleware(writer, ctx, inputSymbol, outputSymbol, outputErrorSymbol, requestBindings)
96-
}
9784
override fun addProtocolSpecificMiddleware(ctx: ProtocolGenerator.GenerationContext, operation: OperationShape) {
9885
super.addProtocolSpecificMiddleware(ctx, operation)
9986
// Original instance of OperationInputBodyMiddleware checks if there is an HTTP Body, but for AWSQuery
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package software.amazon.smithy.aws.swift.codegen.awsquery
2+
3+
import software.amazon.smithy.aws.swift.codegen.middleware.FormURLHttpBodyMiddleware
4+
import software.amazon.smithy.codegen.core.Symbol
5+
import software.amazon.smithy.model.shapes.Shape
6+
import software.amazon.smithy.swift.codegen.Middleware
7+
import software.amazon.smithy.swift.codegen.SwiftWriter
8+
import software.amazon.smithy.swift.codegen.integration.HttpBindingDescriptor
9+
import software.amazon.smithy.swift.codegen.integration.HttpProtocolBodyMiddlewareGeneratorFactory
10+
import software.amazon.smithy.swift.codegen.integration.ProtocolGenerator
11+
12+
class FormURLBodyMiddlewareGeneratorFactory : HttpProtocolBodyMiddlewareGeneratorFactory {
13+
override fun shouldRenderHttpBodyMiddleware(shape: Shape): Boolean {
14+
return true
15+
}
16+
17+
override fun httpBodyMiddleware(
18+
writer: SwiftWriter,
19+
ctx: ProtocolGenerator.GenerationContext,
20+
inputSymbol: Symbol,
21+
outputSymbol: Symbol,
22+
outputErrorSymbol: Symbol,
23+
requestBindings: List<HttpBindingDescriptor>,
24+
): Middleware {
25+
return FormURLHttpBodyMiddleware(writer, ctx, inputSymbol, outputSymbol, outputErrorSymbol, requestBindings)
26+
}
27+
}

codegen/smithy-aws-swift-codegen/src/main/kotlin/software/amazon/smithy/aws/swift/codegen/customization/polly/PollyGetPresignerIntegration.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import software.amazon.smithy.model.shapes.OperationShape
1212
import software.amazon.smithy.model.shapes.ServiceShape
1313
import software.amazon.smithy.swift.codegen.ClientRuntimeTypes
1414
import software.amazon.smithy.swift.codegen.MiddlewareGenerator
15-
import software.amazon.smithy.swift.codegen.ServiceGenerator
1615
import software.amazon.smithy.swift.codegen.SwiftDelegator
1716
import software.amazon.smithy.swift.codegen.SwiftDependency
1817
import software.amazon.smithy.swift.codegen.SwiftSettings
@@ -22,6 +21,7 @@ import software.amazon.smithy.swift.codegen.core.CodegenContext
2221
import software.amazon.smithy.swift.codegen.core.toProtocolGenerationContext
2322
import software.amazon.smithy.swift.codegen.integration.ProtocolGenerator
2423
import software.amazon.smithy.swift.codegen.integration.SwiftIntegration
24+
import software.amazon.smithy.swift.codegen.integration.middlewares.handlers.MiddlewareShapeUtils
2525
import software.amazon.smithy.swift.codegen.middleware.MiddlewareExecutionGenerator
2626
import software.amazon.smithy.swift.codegen.middleware.MiddlewareStep
2727
import software.amazon.smithy.swift.codegen.middleware.OperationMiddleware
@@ -154,7 +154,7 @@ class PollyGetPresignerIntegration(private val presignedOperations: Map<String,
154154
val opIndex = OperationIndex.of(ctx.model)
155155
val inputShape = opIndex.getInput(op).get()
156156
val outputShape = opIndex.getOutput(op).get()
157-
val operationErrorName = ServiceGenerator.getOperationErrorShapeName(op)
157+
val operationErrorName = MiddlewareShapeUtils.outputErrorSymbolName(op)
158158
val inputSymbol = ctx.symbolProvider.toSymbol(inputShape)
159159
val outputSymbol = ctx.symbolProvider.toSymbol(outputShape)
160160
val outputErrorSymbol = Symbol.builder().name(operationErrorName).build()

codegen/smithy-aws-swift-codegen/src/main/kotlin/software/amazon/smithy/aws/swift/codegen/ec2query/Ec2QueryProtocolGenerator.kt

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,18 @@ package software.amazon.smithy.aws.swift.codegen.ec2query
88
import software.amazon.smithy.aws.swift.codegen.AWSHttpBindingProtocolGenerator
99
import software.amazon.smithy.aws.swift.codegen.AWSHttpProtocolClientCustomizableFactory
1010
import software.amazon.smithy.aws.swift.codegen.FormURLHttpBindingResolver
11+
import software.amazon.smithy.aws.swift.codegen.awsquery.FormURLBodyMiddlewareGeneratorFactory
1112
import software.amazon.smithy.aws.swift.codegen.ec2query.httpResponse.AWSEc2QueryHttpResponseBindingErrorGenerator
1213
import software.amazon.smithy.aws.swift.codegen.ec2query.httpResponse.AWSEc2QueryHttpResponseBindingErrorInitGeneratorFactory
13-
import software.amazon.smithy.aws.swift.codegen.middleware.FormURLHttpBodyMiddleware
1414
import software.amazon.smithy.aws.traits.protocols.Ec2QueryTrait
15-
import software.amazon.smithy.codegen.core.Symbol
1615
import software.amazon.smithy.model.shapes.MemberShape
1716
import software.amazon.smithy.model.shapes.OperationShape
1817
import software.amazon.smithy.model.shapes.Shape
1918
import software.amazon.smithy.model.shapes.ShapeId
2019
import software.amazon.smithy.model.traits.TimestampFormatTrait
21-
import software.amazon.smithy.swift.codegen.Middleware
2220
import software.amazon.smithy.swift.codegen.SwiftWriter
23-
import software.amazon.smithy.swift.codegen.integration.HttpBindingDescriptor
2421
import software.amazon.smithy.swift.codegen.integration.HttpBindingResolver
22+
import software.amazon.smithy.swift.codegen.integration.HttpProtocolBodyMiddlewareGeneratorFactory
2523
import software.amazon.smithy.swift.codegen.integration.HttpProtocolUnitTestGenerator
2624
import software.amazon.smithy.swift.codegen.integration.ProtocolGenerator
2725
import software.amazon.smithy.swift.codegen.integration.codingKeys.CodingKeysCustomizationXmlName
@@ -76,19 +74,8 @@ class Ec2QueryProtocolGenerator : AWSHttpBindingProtocolGenerator() {
7674
decoder.render()
7775
}
7876

79-
override fun shouldRenderHttpBodyMiddleware(shape: Shape): Boolean {
80-
return true
81-
}
82-
83-
override fun httpBodyMiddleware(
84-
writer: SwiftWriter,
85-
ctx: ProtocolGenerator.GenerationContext,
86-
inputSymbol: Symbol,
87-
outputSymbol: Symbol,
88-
outputErrorSymbol: Symbol,
89-
requestBindings: List<HttpBindingDescriptor>
90-
): Middleware {
91-
return FormURLHttpBodyMiddleware(writer, ctx, inputSymbol, outputSymbol, outputErrorSymbol, requestBindings)
77+
override fun httpProtocolBodyMiddleware(): HttpProtocolBodyMiddlewareGeneratorFactory {
78+
return FormURLBodyMiddlewareGeneratorFactory()
9279
}
9380

9481
override fun addProtocolSpecificMiddleware(ctx: ProtocolGenerator.GenerationContext, operation: OperationShape) {

codegen/smithy-aws-swift-codegen/src/main/kotlin/software/amazon/smithy/aws/swift/codegen/middleware/AWSXAmzTargetMiddleware.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import software.amazon.smithy.codegen.core.SymbolProvider
1010
import software.amazon.smithy.model.Model
1111
import software.amazon.smithy.model.shapes.OperationShape
1212
import software.amazon.smithy.model.shapes.ServiceShape
13-
import software.amazon.smithy.swift.codegen.ServiceGenerator
1413
import software.amazon.smithy.swift.codegen.SwiftWriter
14+
import software.amazon.smithy.swift.codegen.integration.middlewares.handlers.MiddlewareShapeUtils
1515
import software.amazon.smithy.swift.codegen.middleware.MiddlewarePosition
1616
import software.amazon.smithy.swift.codegen.middleware.MiddlewareRenderable
1717
import software.amazon.smithy.swift.codegen.middleware.MiddlewareStep
@@ -33,9 +33,9 @@ class AWSXAmzTargetMiddleware(
3333
op: OperationShape,
3434
operationStackName: String,
3535
) {
36-
val inputShapeName = ServiceGenerator.getOperationInputShapeName(symbolProvider, model, op)
37-
val outputShapeName = ServiceGenerator.getOperationOutputShapeName(symbolProvider, model, op)
38-
val outputErrorName = ServiceGenerator.getOperationErrorShapeName(op)
36+
val inputShapeName = MiddlewareShapeUtils.inputSymbol(symbolProvider, model, op).name
37+
val outputShapeName = MiddlewareShapeUtils.outputSymbol(symbolProvider, model, op).name
38+
val outputErrorName = MiddlewareShapeUtils.outputErrorSymbolName(op)
3939
writer.addImport(XAmzTargetMiddleware)
4040
writer.write("$operationStackName.${middlewareStep.stringValue()}.intercept(position: ${position.stringValue()}, middleware: \$N<$inputShapeName, $outputShapeName, $outputErrorName>(${middlewareParamsString(op)}))", XAmzTargetMiddleware)
4141
}

codegen/smithy-aws-swift-codegen/src/main/kotlin/software/amazon/smithy/aws/swift/codegen/middleware/GlacierAccountIdMiddleware.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import software.amazon.smithy.model.Model
55
import software.amazon.smithy.model.shapes.OperationShape
66
import software.amazon.smithy.model.shapes.StructureShape
77
import software.amazon.smithy.swift.codegen.ClientRuntimeTypes
8-
import software.amazon.smithy.swift.codegen.ServiceGenerator
98
import software.amazon.smithy.swift.codegen.SwiftTypes
109
import software.amazon.smithy.swift.codegen.SwiftWriter
10+
import software.amazon.smithy.swift.codegen.integration.middlewares.handlers.MiddlewareShapeUtils
1111
import software.amazon.smithy.swift.codegen.middleware.MiddlewarePosition
1212
import software.amazon.smithy.swift.codegen.middleware.MiddlewareRenderable
1313
import software.amazon.smithy.swift.codegen.middleware.MiddlewareStep
@@ -21,8 +21,8 @@ class GlacierAccountIdMiddleware(private val model: Model, private val symbolPro
2121
override val position = MiddlewarePosition.BEFORE
2222

2323
override fun render(writer: SwiftWriter, op: OperationShape, operationStackName: String) {
24-
val outputShapeName = ServiceGenerator.getOperationOutputShapeName(symbolProvider, model, op)
25-
val outputErrorShapeName = ServiceGenerator.getOperationErrorShapeName(op)
24+
val outputShapeName = MiddlewareShapeUtils.outputSymbol(symbolProvider, model, op).name
25+
val outputErrorShapeName = MiddlewareShapeUtils.outputErrorSymbolName(op)
2626
val accountId = model.expectShape<StructureShape>(op.input.get()).members().first { it.memberName.lowercase() == "accountid" }
2727
writer.openBlock(
2828
"$operationStackName.${middlewareStep.stringValue()}.intercept(position: ${position.stringValue()}, id: \"${name}\") { (context, input, next) -> \$N<\$N<$outputShapeName>, \$N<$outputErrorShapeName>> in", "}",

0 commit comments

Comments
 (0)