Skip to content

Commit 4987ff7

Browse files
authored
fix: Allow Smithy enum & intEnum to bind to event headers (#977)
1 parent d4b9677 commit 4987ff7

File tree

2 files changed

+24
-31
lines changed

2 files changed

+24
-31
lines changed

smithy-swift-codegen/src/main/kotlin/software/amazon/smithy/swift/codegen/events/MessageMarshallableGenerator.kt

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -155,33 +155,6 @@ class MessageMarshallableGenerator(
155155
}
156156
}
157157

158-
/**
159-
*
160-
* if let headerValue = value.blob {
161-
* headers.append(.init(name: "blob", value: .byteArray(headerValue)))
162-
* }
163-
* if let headerValue = value.boolean {
164-
* headers.append(.init(name: "boolean", value: .bool(headerValue)))
165-
* }
166-
* if let headerValue = value.byte {
167-
* headers.append(.init(name: "byte", value: .byte(headerValue)))
168-
* }
169-
* if let headerValue = value.int {
170-
* headers.append(.init(name: "int", value: .int32(Int32(headerValue))))
171-
* }
172-
* if let headerValue = value.long {
173-
* headers.append(.init(name: "long", value: .int64(Int64(headerValue))))
174-
* }
175-
* if let headerValue = value.short {
176-
* headers.append(.init(name: "short", value: .int16(headerValue)))
177-
* }
178-
* if let headerValue = value.string {
179-
* headers.append(.init(name: "string", value: .string(headerValue)))
180-
* }
181-
* if let headerValue = value.timestamp {
182-
* headers.append(.init(name: "timestamp", value: .timestamp(headerValue)))
183-
* }
184-
*/
185158
private fun renderSerializeEventHeader(
186159
ctx: ProtocolGenerator.GenerationContext,
187160
member: MemberShape,
@@ -193,10 +166,10 @@ class MessageMarshallableGenerator(
193166
ShapeType.BOOLEAN -> "bool"
194167
ShapeType.BYTE -> "byte"
195168
ShapeType.SHORT -> "int16"
196-
ShapeType.INTEGER -> "int32"
169+
ShapeType.INTEGER, ShapeType.INT_ENUM -> "int32"
197170
ShapeType.LONG -> "int64"
198171
ShapeType.BLOB -> "byteArray"
199-
ShapeType.STRING -> "string"
172+
ShapeType.STRING, ShapeType.ENUM -> "string"
200173
ShapeType.TIMESTAMP -> "timestamp"
201174
else -> throw CodegenException("unsupported shape type `${target.type}` for eventHeader member `$member`; target: $target")
202175
}
@@ -207,9 +180,23 @@ class MessageMarshallableGenerator(
207180
ShapeType.INTEGER -> {
208181
writer.write("headers.append(.init(name: \"${member.memberName}\", value: .\$L(Int32(headerValue))))", headerValue)
209182
}
183+
ShapeType.INT_ENUM -> {
184+
writer.write(
185+
"headers.append(.init(name: \$S, value: .\$L(Int32(headerValue.rawValue))))",
186+
member.memberName,
187+
headerValue,
188+
)
189+
}
210190
ShapeType.LONG -> {
211191
writer.write("headers.append(.init(name: \"${member.memberName}\", value: .\$L(Int64(headerValue))))", headerValue)
212192
}
193+
ShapeType.ENUM -> {
194+
writer.write(
195+
"headers.append(.init(name: \$S, value: .\$L(headerValue.rawValue)))",
196+
member.memberName,
197+
headerValue,
198+
)
199+
}
213200
else -> {
214201
writer.write("headers.append(.init(name: \"${member.memberName}\", value: .\$L(headerValue)))", headerValue)
215202
}

smithy-swift-codegen/src/main/kotlin/software/amazon/smithy/swift/codegen/events/MessageUnmarshallableGenerator.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,10 @@ class MessageUnmarshallableGenerator(
156156
ShapeType.BOOLEAN -> "bool"
157157
ShapeType.BYTE -> "byte"
158158
ShapeType.SHORT -> "int16"
159-
ShapeType.INTEGER -> "int32"
159+
ShapeType.INTEGER, ShapeType.INT_ENUM -> "int32"
160160
ShapeType.LONG -> "int64"
161161
ShapeType.BLOB -> "byteArray"
162-
ShapeType.STRING -> "string"
162+
ShapeType.STRING, ShapeType.ENUM -> "string"
163163
ShapeType.TIMESTAMP -> "timestamp"
164164
else -> throw CodegenException("unsupported eventHeader shape: member=$hdrBinding; targetShape=$target")
165165
}
@@ -170,6 +170,12 @@ class MessageUnmarshallableGenerator(
170170
ShapeType.INTEGER, ShapeType.LONG -> {
171171
writer.write("event.\$L = Int(value)", memberName)
172172
}
173+
ShapeType.INT_ENUM -> {
174+
writer.write("event.\$L = .init(rawValue: Int(value))", memberName)
175+
}
176+
ShapeType.ENUM -> {
177+
writer.write("event.\$L = .init(rawValue: value)", memberName)
178+
}
173179
else -> {
174180
writer.write("event.\$L = value", memberName)
175181
}

0 commit comments

Comments
 (0)