Skip to content

Commit

Permalink
fix: Correct serde for restJson1 event streams that contain errors (#596
Browse files Browse the repository at this point in the history
)
  • Loading branch information
jbelkins authored Oct 2, 2023
1 parent 88529fe commit a8aea3c
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,8 @@ abstract class HttpBindingProtocolGenerator : ProtocolGenerator {
generateCodingKeysForMembers(ctx, writer, httpBodyMembers)
writer.write("")
}
renderStructEncode(ctx, shape, shapeMetadata, httpBodyMembers, writer, defaultTimestampFormat, "")
val path = "properties.".takeIf { shape.hasTrait<ErrorTrait>() } ?: null
renderStructEncode(ctx, shape, shapeMetadata, httpBodyMembers, writer, defaultTimestampFormat, path)
}
}
}
Expand Down Expand Up @@ -462,7 +463,7 @@ abstract class HttpBindingProtocolGenerator : ProtocolGenerator {
members: List<MemberShape>,
writer: SwiftWriter,
defaultTimestampFormat: TimestampFormatTrait.Format,
path: String
path: String? = null
)
protected abstract fun renderStructDecode(
ctx: ProtocolGenerator.GenerationContext,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,8 @@ abstract class MemberShapeEncodeGenerator(
memberName: String,
containerName: String,
codingKey: String?,
isBoxed: Boolean
isBoxed: Boolean,
path: String? = null
) {
val targetShape = when (memberShape) {
is MemberShape -> ctx.model.expectShape(memberShape.target)
Expand Down Expand Up @@ -236,15 +237,16 @@ abstract class MemberShapeEncodeGenerator(
fun renderSimpleEncodeMember(
target: Shape,
member: MemberShape,
containerName: String
containerName: String,
path: String? = null
) {
val symbol = ctx.symbolProvider.toSymbol(member)
val memberName = ctx.symbolProvider.toMemberName(member)
val isBoxed = symbol.isBoxed()
val memberWithExtension = getShapeExtension(member, memberName, isBoxed, true)
if (isBoxed) {
writer.openBlock("if let $memberName = self.$memberName {", "}") {
renderSimpleShape(member, memberName, containerName, ".$memberName", isBoxed)
writer.openBlock("if let $memberName = self.${path ?: ""}$memberName {", "}") {
renderSimpleShape(member, memberName, containerName, ".$memberName", isBoxed, path)
}
} else {
val primitiveSymbols: MutableSet<ShapeType> = hashSetOf(
Expand All @@ -254,10 +256,10 @@ abstract class MemberShapeEncodeGenerator(
if (primitiveSymbols.contains(target.type)) {
val defaultValue = getDefaultValueOfShapeType(target.type)
writer.openBlock("if $memberName != $defaultValue {", "}") {
renderSimpleShape(member, memberName, containerName, ".$memberName", isBoxed)
renderSimpleShape(member, memberName, containerName, ".$memberName", isBoxed, path)
}
} else
renderSimpleShape(member, memberName, containerName, ".$memberName", isBoxed)
renderSimpleShape(member, memberName, containerName, ".$memberName", isBoxed, path)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ class StructEncodeGenerator(
private val ctx: ProtocolGenerator.GenerationContext,
private val members: List<MemberShape>,
private val writer: SwiftWriter,
private val defaultTimestampFormat: TimestampFormatTrait.Format
private val defaultTimestampFormat: TimestampFormatTrait.Format,
private val path: String? = null
) : MemberShapeEncodeGenerator(ctx, writer, defaultTimestampFormat) {
override fun render() {
val containerName = "encodeContainer"
Expand All @@ -58,18 +59,18 @@ class StructEncodeGenerator(
val memberName = ctx.symbolProvider.toMemberName(member)
when (target) {
is CollectionShape -> {
writer.openBlock("if let $memberName = $memberName {", "}") {
writer.openBlock("if let $memberName = ${path ?: ""}$memberName {", "}") {
renderEncodeListMember(target, memberName, containerName)
}
}
is MapShape -> {
writer.openBlock("if let $memberName = $memberName {", "}") {
writer.openBlock("if let $memberName = ${path ?: ""}$memberName {", "}") {
renderEncodeMapMember(target, memberName, containerName)
}
}
else -> {
renderSimpleEncodeMember(
target, member, containerName
target, member, containerName, path
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,9 @@ class MockHttpAWSJson11ProtocolGenerator : HttpBindingProtocolGenerator() {
members: List<MemberShape>,
writer: SwiftWriter,
defaultTimestampFormat: TimestampFormatTrait.Format,
path: String
path: String?
) {
val encodeGenerator = StructEncodeGenerator(ctx, members, writer, defaultTimestampFormat)
val encodeGenerator = StructEncodeGenerator(ctx, members, writer, defaultTimestampFormat, path)
encodeGenerator.render()
}
override fun renderStructDecode(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ class MockHttpEC2QueryProtocolGenerator : HttpBindingProtocolGenerator() {
members: List<MemberShape>,
writer: SwiftWriter,
defaultTimestampFormat: TimestampFormatTrait.Format,
path: String
path: String?
) {
val customizations = MockEc2QueryFormURLEncodeCustomizations()
val encodeGenerator = StructEncodeFormURLGenerator(ctx, customizations, shapeContainingMembers, shapeMetadata, members, writer, defaultTimestampFormat)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,9 @@ class MockHttpRestJsonProtocolGenerator : HttpBindingProtocolGenerator() {
members: List<MemberShape>,
writer: SwiftWriter,
defaultTimestampFormat: TimestampFormatTrait.Format,
path: String
path: String?
) {
val encodeGenerator = StructEncodeGenerator(ctx, members, writer, defaultTimestampFormat)
val encodeGenerator = StructEncodeGenerator(ctx, members, writer, defaultTimestampFormat, path)
encodeGenerator.render()
}
override fun renderStructDecode(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class MockHttpRestXMLProtocolGenerator : HttpBindingProtocolGenerator() {
members: List<MemberShape>,
writer: SwiftWriter,
defaultTimestampFormat: TimestampFormatTrait.Format,
path: String
path: String?
) {
val encoder = StructEncodeXMLGenerator(ctx, shapeContainingMembers, members, writer, defaultTimestampFormat)
encoder.render()
Expand Down

0 comments on commit a8aea3c

Please sign in to comment.