Skip to content

Commit

Permalink
Eliminate encoders/decoders where not used
Browse files Browse the repository at this point in the history
  • Loading branch information
jbelkins committed Jan 15, 2024
1 parent 2562b24 commit 5bae0ee
Show file tree
Hide file tree
Showing 19 changed files with 159 additions and 193 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public struct RestXMLError {
let reader = Self.errorBodyReader(responseReader: responseReader, noErrorWrapping: noErrorWrapping)
let code: String? = try reader["Code"].readIfPresent()
let message: String? = try reader["Message"].readIfPresent()
let requestID: String? = try reader["RequestId"].readIfPresent()
let requestID: String? = try responseReader["RequestId"].readIfPresent()
guard let code, let requestID else {
throw RestXMLDecodeError.missingRequiredData
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import software.amazon.smithy.swift.codegen.SwiftWriter
import software.amazon.smithy.swift.codegen.integration.HttpBindingProtocolGenerator
import software.amazon.smithy.swift.codegen.integration.HttpProtocolTestGenerator
import software.amazon.smithy.swift.codegen.integration.HttpProtocolUnitTestErrorGenerator
import software.amazon.smithy.swift.codegen.integration.HttpProtocolUnitTestGenerator
import software.amazon.smithy.swift.codegen.integration.HttpProtocolUnitTestRequestGenerator
import software.amazon.smithy.swift.codegen.integration.HttpProtocolUnitTestResponseGenerator
import software.amazon.smithy.swift.codegen.integration.ProtocolGenerator
Expand All @@ -45,10 +44,6 @@ abstract class AWSHttpBindingProtocolGenerator : HttpBindingProtocolGenerator()

override val httpProtocolClientGeneratorFactory = AWSHttpProtocolClientGeneratorFactory()

val serdeContextJSON = HttpProtocolUnitTestGenerator.SerdeContext("JSONEncoder()", "JSONDecoder()", ".secondsSince1970")
val serdeContextXML = HttpProtocolUnitTestGenerator.SerdeContext("XMLEncoder()", "XMLDecoder()")
abstract val serdeContext: HttpProtocolUnitTestGenerator.SerdeContext

val requestTestBuilder = HttpProtocolUnitTestRequestGenerator.Builder()
val responseTestBuilder = HttpProtocolUnitTestResponseGenerator.Builder()
val errorTestBuilder = HttpProtocolUnitTestErrorGenerator.Builder()
Expand All @@ -68,7 +63,6 @@ abstract class AWSHttpBindingProtocolGenerator : HttpBindingProtocolGenerator()
httpProtocolCustomizable,
operationMiddleware,
getProtocolHttpBindingResolver(ctx, defaultContentType),
serdeContext,
imports,
testsToIgnore,
tagsToIgnore,
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -41,76 +41,78 @@ class XMLMessageUnmarshallableGenerator(val ctx: ProtocolGenerator.GenerationCon
writer.addImport(AWSSwiftDependency.AWS_CLIENT_RUNTIME.target)
writer.openBlock("extension \$L {", "}", streamSymbol.fullName) {
writer.openBlock(
"static func unmarshal(message: \$N) throws -> \$N {", "}",
ClientRuntimeTypes.EventStream.Message,
"static var unmarshal: \$N<\$N> {", "}",
ClientRuntimeTypes.EventStream.UnmarshalClosure,
streamSymbol,
) {
writer.write("switch try message.type() {")
writer.write("case .event(let params):")
writer.indent {
writer.write("switch params.eventType {")
streamShape.eventStreamEvents(ctx.model).forEach { member ->
writer.write("case \"${member.memberName}\":")
writer.indent {
renderDeserializeEventVariant(ctx, streamSymbol, member, writer)
}
}
writer.write("default:")
writer.openBlock("{ message in", "}") {
writer.write("switch try message.type() {")
writer.write("case .event(let params):")
writer.indent {
writer.write("return .sdkUnknown(\"error processing event stream, unrecognized event: \\(params.eventType)\")")
}
writer.write("}")
}
writer.write("case .exception(let params):")
writer.indent {
writer.write(
"let makeError: (\$N, \$N) throws -> \$N = { message, params in",
ClientRuntimeTypes.EventStream.Message,
ClientRuntimeTypes.EventStream.ExceptionParams,
SwiftTypes.Error
)
writer.indent {
writer.write("switch params.exceptionType {")
streamShape.eventStreamErrors(ctx.model).forEach { member ->
writer.write("switch params.eventType {")
streamShape.eventStreamEvents(ctx.model).forEach { member ->
writer.write("case \"${member.memberName}\":")
writer.indent {
val targetShape = ctx.model.expectShape(member.target)
val symbol = ctx.symbolProvider.toSymbol(targetShape)
writer.write("return try decoder.decode(responseBody: message.payload) as \$N", symbol)
renderDeserializeEventVariant(ctx, streamSymbol, member, writer)
}
}
writer.write("default:")
writer.indent {
writer.write("let httpResponse = HttpResponse(body: .data(message.payload), statusCode: .ok)")
writer.write(
"return \$L(httpResponse: httpResponse, message: \"error processing event stream, unrecognized ':exceptionType': \\(params.exceptionType); contentType: \\(params.contentType ?? \"nil\")\", requestID: nil, typeName: nil)",
AWSClientRuntimeTypes.Core.UnknownAWSHTTPServiceError
)
writer.write("return .sdkUnknown(\"error processing event stream, unrecognized event: \\(params.eventType)\")")
}
writer.write("}")
}
writer.write("case .exception(let params):")
writer.indent {
writer.write(
"let makeError: (\$N, \$N) throws -> \$N = { message, params in",
ClientRuntimeTypes.EventStream.Message,
ClientRuntimeTypes.EventStream.ExceptionParams,
SwiftTypes.Error
)
writer.indent {
writer.write("switch params.exceptionType {")
streamShape.eventStreamErrors(ctx.model).forEach { member ->
writer.write("case \"${member.memberName}\":")
writer.indent {
val targetShape = ctx.model.expectShape(member.target)
val symbol = ctx.symbolProvider.toSymbol(targetShape)
writer.write("return try decoder.decode(responseBody: message.payload) as \$N", symbol)
}
}
writer.write("default:")
writer.indent {
writer.write("let httpResponse = HttpResponse(body: .data(message.payload), statusCode: .ok)")
writer.write(
"return \$L(httpResponse: httpResponse, message: \"error processing event stream, unrecognized ':exceptionType': \\(params.exceptionType); contentType: \\(params.contentType ?? \"nil\")\", requestID: nil, typeName: nil)",
AWSClientRuntimeTypes.Core.UnknownAWSHTTPServiceError
)
}
writer.write("}")
}
writer.write("}")
writer.write("let error = try makeError(message, params)")
writer.write("throw error")
}
writer.write("case .error(let params):")
writer.indent {
// this is a service exception still, just un-modeled
writer.write("let httpResponse = HttpResponse(body: .data(message.payload), statusCode: .ok)")
writer.write(
"throw \$L(httpResponse: httpResponse, message: \"error processing event stream, unrecognized ':errorType': \\(params.errorCode); message: \\(params.message ?? \"nil\")\", requestID: nil, typeName: nil)",
AWSClientRuntimeTypes.Core.UnknownAWSHTTPServiceError
)
}
writer.write("case .unknown(messageType: let messageType):")
writer.indent {
// this is a client exception because we failed to parse it
writer.write(
"throw \$L(\"unrecognized event stream message ':message-type': \\(messageType)\")",
ClientRuntimeTypes.Core.UnknownClientError
)
}
writer.write("}")
writer.write("let error = try makeError(message, params)")
writer.write("throw error")
}
writer.write("case .error(let params):")
writer.indent {
// this is a service exception still, just un-modeled
writer.write("let httpResponse = HttpResponse(body: .data(message.payload), statusCode: .ok)")
writer.write(
"throw \$L(httpResponse: httpResponse, message: \"error processing event stream, unrecognized ':errorType': \\(params.errorCode); message: \\(params.message ?? \"nil\")\", requestID: nil, typeName: nil)",
AWSClientRuntimeTypes.Core.UnknownAWSHTTPServiceError
)
}
writer.write("case .unknown(messageType: let messageType):")
writer.indent {
// this is a client exception because we failed to parse it
writer.write(
"throw \$L(\"unrecognized event stream message ':message-type': \\(messageType)\")",
ClientRuntimeTypes.Core.UnknownClientError
)
}
writer.write("}")
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ open class AwsJson1_0_ProtocolGenerator : AWSHttpBindingProtocolGenerator() {
HttpResponseBindingOutputGenerator(),
AWSJsonHttpResponseBindingErrorGenerator()
)
override val serdeContext = serdeContextJSON
override val shouldRenderEncodableConformance: Boolean = true
override val shouldRenderDecodableBodyStructForInputShapes: Boolean = true
override val testsToIgnore = setOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ class AwsJson1_1_ProtocolGenerator : AWSHttpBindingProtocolGenerator() {
HttpResponseBindingOutputGenerator(),
AWSJsonHttpResponseBindingErrorGenerator()
)
override val serdeContext = serdeContextJSON
override val shouldRenderEncodableConformance: Boolean = true
override val shouldRenderDecodableBodyStructForInputShapes: Boolean = true
override val testsToIgnore = setOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ package software.amazon.smithy.aws.swift.codegen.awsquery

import software.amazon.smithy.aws.swift.codegen.AWSHttpProtocolCustomizations
import software.amazon.smithy.aws.swift.codegen.AWSHttpRequestFormURLEncoder
import software.amazon.smithy.aws.swift.codegen.AWSHttpResponseXMLDecoder
import software.amazon.smithy.codegen.core.Symbol
import software.amazon.smithy.model.shapes.Shape
import software.amazon.smithy.protocoltests.traits.HttpRequestTestCase
Expand All @@ -19,9 +18,7 @@ class AWSHttpProtocolAwsQueryCustomizations : AWSHttpProtocolCustomizations() {
override fun getClientProperties(): List<ClientProperty> {
val properties = mutableListOf<ClientProperty>()
val requestEncoderOptions = mutableMapOf<String, String>()
val responseDecoderOptions = mutableMapOf<String, String>()
properties.add(AWSHttpRequestFormURLEncoder(requestEncoderOptions))
properties.add(AWSHttpResponseXMLDecoder(responseDecoderOptions))
return properties
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ open class AwsQueryProtocolGenerator : AWSHttpBindingProtocolGenerator() {
AWSXMLHttpResponseBindingErrorInitGeneratorFactory(),
)

override val serdeContext = HttpProtocolUnitTestGenerator.SerdeContext("FormURLEncoder()", "XMLDecoder()")
override fun getProtocolHttpBindingResolver(ctx: ProtocolGenerator.GenerationContext, defaultContentType: String):
HttpBindingResolver = FormURLHttpBindingResolver(ctx, defaultContentType)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,38 +79,39 @@ class AWSQueryHttpResponseBindingErrorGenerator : HttpResponseBindingErrorGenera
writer.addImport(SwiftDependency.SMITHY_XML.target)
writer.write("")
openBlock(
"static func responseErrorBinding(httpResponse: \$N, reader responseReader: \$N) async throws -> \$N {", "}",
ClientRuntimeTypes.Http.HttpResponse,
"static var httpBinding: \$N<\$N> {", "}",
ClientRuntimeTypes.Http.HTTPResponseErrorBinding,
SmithyXMLTypes.Reader,
SwiftTypes.Error
) {
if (ctx.service.errors.isNotEmpty()) {
write("let serviceError = try await ${ctx.symbolProvider.toSymbol(ctx.service).name}Types.makeServiceError(httpResponse, decoder, ec2QueryError)")
write("if let error = serviceError { return error }")
}
writer.write("let reader = responseReader[\"Error\"]")
writer.write("let type: String? = try reader[\"Type\"].readIfPresent()")
writer.write("let requestID: String? = try responseReader[\"RequestId\"].readIfPresent()")
writer.write("let errorCode: String? = try reader[\"Code\"].readIfPresent()")
writer.write("let message: String? = try reader[\"Message\"].readIfPresent()")
openBlock("switch errorCode {", "}") {
val errorShapes = op.errors
.map { ctx.model.expectShape(it) as StructureShape }
.toSet()
.sorted()
errorShapes.forEach { errorShape ->
var errorShapeName = errorShape.errorShapeName(ctx.symbolProvider)
var errorShapeType = ctx.symbolProvider.toSymbol(errorShape).name
writer.openBlock("{ httpResponse, responseReader in", "}") {
if (ctx.service.errors.isNotEmpty()) {
write("let serviceError = try await ${ctx.symbolProvider.toSymbol(ctx.service).name}Types.makeServiceError(httpResponse, decoder, ec2QueryError)")
write("if let error = serviceError { return error }")
}
writer.write("let reader = responseReader[\"Error\"]")
writer.write("let type: String? = try reader[\"Type\"].readIfPresent()")
writer.write("let requestID: String? = try responseReader[\"RequestId\"].readIfPresent()")
writer.write("let errorCode: String? = try reader[\"Code\"].readIfPresent()")
writer.write("let message: String? = try reader[\"Message\"].readIfPresent()")
openBlock("switch errorCode {", "}") {
val errorShapes = op.errors
.map { ctx.model.expectShape(it) as StructureShape }
.toSet()
.sorted()
errorShapes.forEach { errorShape ->
var errorShapeName = errorShape.errorShapeName(ctx.symbolProvider)
var errorShapeType = ctx.symbolProvider.toSymbol(errorShape).name
write(
"case \$S: return try await \$L.responseErrorBinding(httpResponse: httpResponse, reader: reader, message: message, requestID: requestID)",
errorShapeName,
errorShapeType
)
}
write(
"case \$S: return try await \$L.responseErrorBinding(httpResponse: httpResponse, reader: reader, message: message, requestID: requestID)",
errorShapeName,
errorShapeType
"default: return try await \$N.makeError(httpResponse: httpResponse, message: message, requestID: requestID, typeName: errorCode)",
unknownServiceErrorSymbol
)
}
write(
"default: return try await \$N.makeError(httpResponse: httpResponse, message: message, requestID: requestID, typeName: errorCode)",
unknownServiceErrorSymbol
)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class Route53InvalidBatchErrorIntegration : SwiftIntegration {
}

private fun renderCustomInvalidBatchError(writer: SwiftWriter) {
writer.openBlock("struct CustomInvalidBatchError: Decodable {", "}") {
writer.openBlock("struct CustomInvalidBatchError {", "}") {
writer.write("")
writer.openBlock("struct Message: Decodable {", "}") {
writer.write("let message: String")
Expand Down
Loading

0 comments on commit 5bae0ee

Please sign in to comment.