Skip to content

Commit 59bb223

Browse files
committed
feat: enum and int enums as event headers
1 parent 5e0a9ac commit 59bb223

File tree

3 files changed

+25
-3
lines changed

3 files changed

+25
-3
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"id": "08deb04f-bc93-4d3c-aa2f-d46b2dcce775",
3+
"type": "feature",
4+
"description": "Support enums and int enums as event headers"
5+
}

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class EventStreamParserGenerator(
147147
val target = ctx.model.expectShape(hdrBinding.target)
148148
val targetSymbol = ctx.symbolProvider.toSymbol(target)
149149

150-
// :test(boolean, byte, short, integer, long, blob, string, timestamp))
150+
// :test(boolean, byte, short, integer, long, blob, string, timestamp, enum, int enum))
151151
val conversionFn = when (target.type) {
152152
ShapeType.BOOLEAN -> RuntimeTypes.AwsEventStream.expectBool
153153
ShapeType.BYTE -> RuntimeTypes.AwsEventStream.expectByte
@@ -157,6 +157,8 @@ class EventStreamParserGenerator(
157157
ShapeType.BLOB -> RuntimeTypes.AwsEventStream.expectByteArray
158158
ShapeType.STRING -> RuntimeTypes.AwsEventStream.expectString
159159
ShapeType.TIMESTAMP -> RuntimeTypes.AwsEventStream.expectTimestamp
160+
ShapeType.ENUM -> RuntimeTypes.AwsEventStream.expectString
161+
ShapeType.INT_ENUM -> RuntimeTypes.AwsEventStream.expectInt32
160162
else -> throw CodegenException("unsupported eventHeader shape: member=$hdrBinding; targetShape=$target")
161163
}
162164

@@ -165,7 +167,16 @@ class EventStreamParserGenerator(
165167
} else {
166168
""
167169
}
168-
writer.write("eb.#L = message.headers.find { it.name == #S }?.value?.#T()$defaultValuePostfix", hdrBinding.defaultName(), hdrBinding.memberName, conversionFn)
170+
writer.writeInline("eb.#L = message.headers.find { it.name == #S }?.value?.#T()$defaultValuePostfix", hdrBinding.defaultName(), hdrBinding.memberName, conversionFn)
171+
when (target.type) {
172+
ShapeType.ENUM, ShapeType.INT_ENUM -> {
173+
writer.write(
174+
"?.let { #T.fromValue(it) }",
175+
targetSymbol,
176+
)
177+
}
178+
else -> writer.write("")
179+
}
169180
}
170181

171182
if (eventPayloadBinding != null) {

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,15 @@ class EventStreamSerializerGenerator(
183183
ShapeType.BLOB -> "ByteArray"
184184
ShapeType.STRING -> "String"
185185
ShapeType.TIMESTAMP -> "Timestamp"
186+
ShapeType.ENUM -> "String"
187+
ShapeType.INT_ENUM -> "Int32"
186188
else -> throw CodegenException("unsupported shape type `${target.type}` for eventHeader member `$member`; target: $target")
187189
}
188-
val conversion = if (target.type == ShapeType.BYTE) ".toUByte()" else ""
190+
val conversion = when (target.type) {
191+
ShapeType.BYTE -> ".toUByte()"
192+
ShapeType.ENUM, ShapeType.INT_ENUM -> ".value"
193+
else -> ""
194+
}
189195

190196
writer.write(
191197
"input.value.#L?.let { addHeader(#S, #T.#L(it$conversion)) }",

0 commit comments

Comments
 (0)