Skip to content

Commit 9dc8d5f

Browse files
authored
chore: simplify MiddlewareRenderable (#401)
1 parent 2204882 commit 9dc8d5f

File tree

9 files changed

+34
-58
lines changed

9 files changed

+34
-58
lines changed

codegen/smithy-aws-swift-codegen/src/main/kotlin/software/amazon/smithy/aws/swift/codegen/customization/s3/S3SigningConfig.kt

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ package software.amazon.smithy.aws.swift.codegen.customization.s3
66

77
import software.amazon.smithy.aws.swift.codegen.middleware.AWSSigningMiddleware
88
import software.amazon.smithy.aws.traits.auth.UnsignedPayloadTrait
9-
import software.amazon.smithy.codegen.core.SymbolProvider
109
import software.amazon.smithy.model.Model
1110
import software.amazon.smithy.model.shapes.OperationShape
1211
import software.amazon.smithy.model.shapes.ServiceShape
@@ -18,9 +17,6 @@ import software.amazon.smithy.swift.codegen.middleware.OperationMiddleware
1817
import software.amazon.smithy.swift.codegen.model.expectShape
1918
import software.amazon.smithy.swift.codegen.model.hasTrait
2019

21-
/**
22-
* Overrides the SigV4 signing middleware config for S3.
23-
*/
2420
class S3SigningConfig : SwiftIntegration {
2521

2622
override val order: Byte
@@ -35,16 +31,10 @@ class S3SigningConfig : SwiftIntegration {
3531
operationMiddleware: OperationMiddleware
3632
) {
3733
operationMiddleware.removeMiddleware(operationShape, MiddlewareStep.FINALIZESTEP, "AWSSigningMiddleware")
38-
operationMiddleware.appendMiddleware(operationShape, S3SigningMiddleware())
34+
operationMiddleware.appendMiddleware(operationShape, AWSSigningMiddleware(::middlewareParamsString))
3935
}
40-
}
4136

42-
private class S3SigningMiddleware() : AWSSigningMiddleware() {
43-
override fun middlewareParamsString(
44-
model: Model,
45-
symbolProvider: SymbolProvider,
46-
op: OperationShape
47-
): String {
37+
private fun middlewareParamsString(op: OperationShape): String {
4838
val hasUnsignedPayload = op.hasTrait<UnsignedPayloadTrait>()
4939
return "useDoubleURIEncode: false, shouldNormalizeURIPath: false, signedBodyHeader: .contentSha256, unsignedBody: $hasUnsignedPayload"
5040
}

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

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,47 +22,42 @@ import software.amazon.smithy.swift.codegen.middleware.MiddlewareStep
2222
import software.amazon.smithy.swift.codegen.model.expectTrait
2323
import software.amazon.smithy.swift.codegen.model.hasTrait
2424

25-
open class AWSSigningMiddleware : MiddlewareRenderable {
25+
typealias AWSSigningMiddlewareParamsCallback = (OperationShape) -> String
26+
27+
open class AWSSigningMiddleware(val paramsCallback: AWSSigningMiddlewareParamsCallback? = null) : MiddlewareRenderable {
2628

2729
override val name = "AWSSigningMiddleware"
2830

2931
override val middlewareStep = MiddlewareStep.FINALIZESTEP
3032

3133
override val position = MiddlewarePosition.BEFORE
3234

33-
open fun renderConfigDeclaration(
34-
model: Model,
35-
symbolProvider: SymbolProvider,
36-
writer: SwiftWriter,
37-
op: OperationShape
38-
) {
39-
writer.addImport(SigV4Config)
40-
writer.write("let sigv4Config = \$N(${middlewareParamsString(model, symbolProvider, op)})", SigV4Config)
41-
}
42-
4335
override fun render(
4436
model: Model,
4537
symbolProvider: SymbolProvider,
4638
writer: SwiftWriter,
4739
op: OperationShape,
4840
operationStackName: String
4941
) {
50-
// FIXME handle indentation properly or do swift formatting after the fact
51-
renderConfigDeclaration(model, symbolProvider, writer, op)
42+
renderConfigDeclaration(writer, op)
5243
writer.write(
53-
"$operationStackName.${middlewareStep.stringValue()}.intercept(position: ${position.stringValue()},\n" +
54-
" middleware: \$N(config: sigv4Config))",
44+
"$operationStackName.${middlewareStep.stringValue()}.intercept(position: ${position.stringValue()}, middleware: \$N(config: sigv4Config))",
5545
AWSClientRuntimeTypes.Signing.SigV4Middleware
5646
)
5747
}
5848

59-
override fun middlewareParamsString(
60-
model: Model,
61-
symbolProvider: SymbolProvider,
62-
op: OperationShape
63-
): String {
64-
val hasUnsignedPayload = op.hasTrait<UnsignedPayloadTrait>()
65-
return "unsignedBody: $hasUnsignedPayload"
49+
private fun renderConfigDeclaration(writer: SwiftWriter, op: OperationShape) {
50+
writer.addImport(SigV4Config)
51+
writer.write("let sigv4Config = \$N(${middlewareParamsString(op)})", SigV4Config)
52+
}
53+
54+
private fun middlewareParamsString(op: OperationShape): String {
55+
paramsCallback?.let {
56+
return it(op)
57+
} ?: run {
58+
val hasUnsignedPayload = op.hasTrait<UnsignedPayloadTrait>()
59+
return "unsignedBody: $hasUnsignedPayload"
60+
}
6661
}
6762

6863
companion object {

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,10 @@ class AWSXAmzTargetMiddleware(val serviceShape: ServiceShape) : MiddlewareRender
3535
val outputShapeName = ServiceGenerator.getOperationOutputShapeName(symbolProvider, model, op)
3636
val outputErrorName = ServiceGenerator.getOperationErrorShapeName(op)
3737
writer.addImport(XAmzTargetMiddleware)
38-
writer.write("$operationStackName.${middlewareStep.stringValue()}.intercept(position: ${position.stringValue()}, middleware: \$N<$inputShapeName, $outputShapeName, $outputErrorName>(${middlewareParamsString(model, symbolProvider, op)}))", XAmzTargetMiddleware)
38+
writer.write("$operationStackName.${middlewareStep.stringValue()}.intercept(position: ${position.stringValue()}, middleware: \$N<$inputShapeName, $outputShapeName, $outputErrorName>(${middlewareParamsString(op)}))", XAmzTargetMiddleware)
3939
}
4040

41-
override fun middlewareParamsString(
42-
model: Model,
43-
symbolProvider: SymbolProvider,
44-
op: OperationShape
45-
): String {
41+
private fun middlewareParamsString(op: OperationShape): String {
4642
val xAmzTargetValue = xAmzTargetValue(serviceShape, op)
4743
return "xAmzTarget: \"${xAmzTargetValue}\""
4844
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ class EndpointResolverMiddleware : MiddlewareRenderable {
2323
override val position = MiddlewarePosition.BEFORE
2424

2525
override fun render(model: Model, symbolProvider: SymbolProvider, writer: SwiftWriter, op: OperationShape, operationStackName: String) {
26-
writer.write("$operationStackName.${middlewareStep.stringValue()}.intercept(position: ${position.stringValue()}, middleware: \$N(${middlewareParamsString(model, symbolProvider, op)}))", AWSClientRuntimeTypes.Core.EndpointResolverMiddleware)
26+
writer.write("$operationStackName.${middlewareStep.stringValue()}.intercept(position: ${position.stringValue()}, middleware: \$N(${middlewareParamsString()}))", AWSClientRuntimeTypes.Core.EndpointResolverMiddleware)
2727
}
2828

29-
override fun middlewareParamsString(model: Model, symbolProvider: SymbolProvider, op: OperationShape): String {
29+
private fun middlewareParamsString(): String {
3030
return "endpointResolver: config.endpointResolver, serviceId: serviceName"
3131
}
3232
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ class MutateHeadersMiddleware(
2121
override val position = MiddlewarePosition.AFTER
2222

2323
override fun render(model: Model, symbolProvider: SymbolProvider, writer: SwiftWriter, op: OperationShape, operationStackName: String) {
24-
val paramsString = middlewareParamsString(model, symbolProvider, op)
24+
val paramsString = middlewareParamsString()
2525
writer.write("$operationStackName.${middlewareStep.stringValue()}.intercept(position: ${position.stringValue()}, middleware: \$N($paramsString))", ClientRuntimeTypes.Middleware.MutateHeadersMiddleware)
2626
}
2727

28-
override fun middlewareParamsString(model: Model, symbolProvider: SymbolProvider, op: OperationShape): String {
28+
private fun middlewareParamsString(): String {
2929
val overrideHeadersString = overrideHeaders.entries.joinToString { "\"${it.key}\": \"${it.value}\"" }
3030
val extraHeadersString = extraHeaders.entries.joinToString { "\"${it.key}\": \"${it.value}\"" }
3131
val addMissingHeadersString = addMissingHeaders.entries.joinToString { "\"${it.key}\": \"${it.value}\"" }

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ class RetryMiddleware : MiddlewareRenderable {
2323
override val position = MiddlewarePosition.AFTER
2424

2525
override fun render(model: Model, symbolProvider: SymbolProvider, writer: SwiftWriter, op: OperationShape, operationStackName: String) {
26-
writer.write("$operationStackName.${middlewareStep.stringValue()}.intercept(position: ${position.stringValue()}, middleware: \$N(${middlewareParamsString(model, symbolProvider, op)}))", AWSClientRuntimeTypes.Core.RetryerMiddleware)
26+
writer.write("$operationStackName.${middlewareStep.stringValue()}.intercept(position: ${position.stringValue()}, middleware: \$N(${middlewareParamsString()}))", AWSClientRuntimeTypes.Core.RetryerMiddleware)
2727
}
2828

29-
override fun middlewareParamsString(model: Model, symbolProvider: SymbolProvider, op: OperationShape): String {
29+
private fun middlewareParamsString(): String {
3030
return "retryer: config.retryer"
3131
}
3232
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ class UserAgentMiddleware(val settings: SwiftSettings) : MiddlewareRenderable {
2424
override val position = MiddlewarePosition.BEFORE
2525

2626
override fun render(model: Model, symbolProvider: SymbolProvider, writer: SwiftWriter, op: OperationShape, operationStackName: String) {
27-
writer.write("$operationStackName.${middlewareStep.stringValue()}.intercept(position: ${position.stringValue()}, middleware: \$N(${middlewareParamsString(model, symbolProvider, op)}))", AWSClientRuntimeTypes.Core.UserAgentMiddleware)
27+
writer.write("$operationStackName.${middlewareStep.stringValue()}.intercept(position: ${position.stringValue()}, middleware: \$N(${middlewareParamsString()}))", AWSClientRuntimeTypes.Core.UserAgentMiddleware)
2828
}
2929

30-
override fun middlewareParamsString(model: Model, symbolProvider: SymbolProvider, op: OperationShape): String {
30+
private fun middlewareParamsString(): String {
3131
return "metadata: ${AWSClientRuntimeTypes.Core.AWSUserAgentMetadata}.fromEnv(apiMetadata: ${AWSClientRuntimeTypes.Core.APIMetadata}(serviceId: serviceName, version: \"${settings.moduleVersion}\"))"
3232
}
3333
}

codegen/smithy-aws-swift-codegen/src/test/kotlin/software/amazon/smithy/aws/swift/codegen/AWSSigningMiddlewareTests.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ class AWSSigningMiddlewareTests {
7171
val expectedContents =
7272
"""
7373
let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: true)
74-
stack.finalizeStep.intercept(position: .before,
75-
middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config))"""
74+
stack.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config))"""
7675
val writer = SwiftWriter("testName")
7776
val serviceShape = ServiceShape.builder()
7877
.id("com.test#Example")
@@ -99,8 +98,7 @@ stack.finalizeStep.intercept(position: .before,
9998
val expectedContents =
10099
"""
101100
let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false)
102-
stack.finalizeStep.intercept(position: .before,
103-
middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config))"""
101+
stack.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config))"""
104102
val writer = SwiftWriter("testName")
105103
val serviceShape = ServiceShape.builder()
106104
.id("com.test#Example")

codegen/smithy-aws-swift-codegen/src/test/kotlin/software/amazon/smithy/aws/swift/codegen/PresignerGeneratorTests.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ class PresignerGeneratorTests {
5151
operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware())
5252
operation.finalizeStep.intercept(position: .after, middleware: AWSClientRuntime.RetryerMiddleware(retryer: config.retryer))
5353
let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false)
54-
operation.finalizeStep.intercept(position: .before,
55-
middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config))
54+
operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config))
5655
operation.deserializeStep.intercept(position: .before, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode))
5756
operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware())
5857
let presignedRequestBuilder = operation.presignedRequest(context: context.build(), input: input, next: ClientRuntime.NoopHandler())
@@ -110,8 +109,7 @@ class PresignerGeneratorTests {
110109
operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware())
111110
operation.finalizeStep.intercept(position: .after, middleware: AWSClientRuntime.RetryerMiddleware(retryer: config.retryer))
112111
let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false)
113-
operation.finalizeStep.intercept(position: .before,
114-
middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config))
112+
operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config))
115113
operation.deserializeStep.intercept(position: .before, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode))
116114
operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware())
117115
let presignedRequestBuilder = operation.presignedRequest(context: context.build(), input: input, next: ClientRuntime.NoopHandler())
@@ -169,8 +167,7 @@ class PresignerGeneratorTests {
169167
operation.finalizeStep.intercept(position: .before, middleware: ClientRuntime.ContentLengthMiddleware())
170168
operation.finalizeStep.intercept(position: .after, middleware: AWSClientRuntime.RetryerMiddleware(retryer: config.retryer))
171169
let sigv4Config = AWSClientRuntime.SigV4Config(unsignedBody: false)
172-
operation.finalizeStep.intercept(position: .before,
173-
middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config))
170+
operation.finalizeStep.intercept(position: .before, middleware: AWSClientRuntime.SigV4Middleware(config: sigv4Config))
174171
operation.deserializeStep.intercept(position: .before, middleware: ClientRuntime.LoggerMiddleware(clientLogMode: config.clientLogMode))
175172
operation.deserializeStep.intercept(position: .after, middleware: ClientRuntime.DeserializeMiddleware())
176173
let presignedRequestBuilder = operation.presignedRequest(context: context.build(), input: input, next: ClientRuntime.NoopHandler())

0 commit comments

Comments
 (0)