Skip to content

Commit 8505a66

Browse files
committed
Add Accept header to all RpcV2Cbor requests
1 parent ad18e2f commit 8505a66

File tree

1 file changed

+14
-8
lines changed
  • codegen/smithy-aws-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/aws/protocols

1 file changed

+14
-8
lines changed

codegen/smithy-aws-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/aws/protocols/RpcV2Cbor.kt

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ import software.amazon.smithy.model.traits.TimestampFormatTrait
2626
import software.amazon.smithy.model.traits.UnitTypeTrait
2727
import software.amazon.smithy.protocol.traits.Rpcv2CborTrait
2828

29+
private const val ACCEPT_HEADER = "application/cbor"
30+
private const val ACCEPT_HEADER_EVENT_STREAM = "application/vnd.amazon.eventstream"
31+
2932
class RpcV2Cbor : AwsHttpBindingProtocolGenerator() {
3033
override val protocol: ShapeId = Rpcv2CborTrait.ID
3134

@@ -59,13 +62,16 @@ class RpcV2Cbor : AwsHttpBindingProtocolGenerator() {
5962
}
6063
}
6164

62-
// Requests with event stream responses MUST include an `Accept` header set to the value `application/vnd.amazon.eventstream`
63-
val eventStreamsAcceptHeaderMiddleware = object : ProtocolMiddleware {
64-
private val mutateHeadersMiddleware = MutateHeadersMiddleware(extraHeaders = mapOf("Accept" to "application/vnd.amazon.eventstream"))
65-
66-
override fun isEnabledFor(ctx: ProtocolGenerator.GenerationContext, op: OperationShape): Boolean = op.isOutputEventStream(ctx.model)
67-
override val name: String = "RpcV2CborEventStreamsAcceptHeaderMiddleware"
68-
override fun render(ctx: ProtocolGenerator.GenerationContext, op: OperationShape, writer: KotlinWriter) = mutateHeadersMiddleware.render(ctx, op, writer)
65+
// Add `Accept` header with value `application/cbor` for standard responses
66+
// and `application/vnd.amazon.eventstream` for event stream responses
67+
val acceptHeaderMiddleware = object : ProtocolMiddleware {
68+
override val name: String = "RpcV2CborAcceptHeaderMiddleware"
69+
override fun render(ctx: ProtocolGenerator.GenerationContext, op: OperationShape, writer: KotlinWriter) {
70+
val acceptHeaderValue = if (op.isOutputEventStream(ctx.model)) ACCEPT_HEADER_EVENT_STREAM else ACCEPT_HEADER
71+
MutateHeadersMiddleware(
72+
extraHeaders = mapOf("Accept" to acceptHeaderValue)
73+
).render(ctx, op, writer)
74+
}
6975
}
7076

7177
// Emit a metric to track usage of RpcV2Cbor
@@ -79,7 +85,7 @@ class RpcV2Cbor : AwsHttpBindingProtocolGenerator() {
7985
return super.getDefaultHttpMiddleware(ctx) + listOf(
8086
smithyProtocolHeaderMiddleware,
8187
validateSmithyProtocolHeaderMiddleware,
82-
eventStreamsAcceptHeaderMiddleware,
88+
acceptHeaderMiddleware,
8389
businessMetricsMiddleware,
8490
)
8591
}

0 commit comments

Comments
 (0)