Unverified Commit 1fa0ecfc authored by Matteo Bigoi's avatar Matteo Bigoi Committed by GitHub
Browse files

Runtime and client codegen support for improved server protocol dispatcher (#822)



* Runtime and client codegen support for improved server protocol dispatcher

Implement Rust runtime defining the traits used by the server to build operations
parsers/serializers:
  * ParseHttpRequest
  * SerializeHttpResponse
  * SerializeHttpError

Refactor ProtocolSupport to allow server configurations:
  * requestDeserialization (bool)
  * requestBodyDeserialization (bool)
  * responseSerialization(bool)
  * errorSerialization(bool)

Change visibility of HttpBoundProtocolGenerator methods to allow to use
them in the server generator

Co-authored-by: default avatarRussell Cohen <rcoh@amazon.com>
Co-authored-by: default avatardavid-perez <d@vidp.dev>
parent 9c134c53
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -201,6 +201,7 @@ data class CargoDependency(
        fun SmithyClient(runtimeConfig: RuntimeConfig) = runtimeConfig.runtimeCrate("client")
        fun SmithyEventStream(runtimeConfig: RuntimeConfig) = runtimeConfig.runtimeCrate("eventstream")
        fun SmithyHttp(runtimeConfig: RuntimeConfig) = runtimeConfig.runtimeCrate("http")
        fun SmithyHttpServer(runtimeConfig: RuntimeConfig) = runtimeConfig.runtimeCrate("http-server")
        fun SmithyHttpTower(runtimeConfig: RuntimeConfig) = runtimeConfig.runtimeCrate("http-tower")

        fun SmithyProtocolTestHelpers(runtimeConfig: RuntimeConfig) =
+1 −1
Original line number Diff line number Diff line
@@ -266,7 +266,7 @@ data class RuntimeType(val name: String?, val dependency: RustDependency?, val n
        fun sdkBody(runtimeConfig: RuntimeConfig): RuntimeType =
            RuntimeType("SdkBody", dependency = CargoDependency.SmithyHttp(runtimeConfig), "aws_smithy_http::body")

        fun parseStrict(runtimeConfig: RuntimeConfig) = RuntimeType(
        fun parseStrictResponse(runtimeConfig: RuntimeConfig) = RuntimeType(
            "ParseStrictResponse",
            dependency = CargoDependency.SmithyHttp(runtimeConfig),
            namespace = "aws_smithy_http::response"
+7 −1
Original line number Diff line number Diff line
@@ -46,10 +46,16 @@ import software.amazon.smithy.rust.codegen.util.toSnakeCase
import java.util.logging.Logger

data class ProtocolSupport(
    /* Client support */
    val requestSerialization: Boolean,
    val requestBodySerialization: Boolean,
    val responseDeserialization: Boolean,
    val errorDeserialization: Boolean
    val errorDeserialization: Boolean,
    /* Server support */
    val requestDeserialization: Boolean,
    val requestBodyDeserialization: Boolean,
    val responseSerialization: Boolean,
    val errorSerialization: Boolean
)

/**
+7 −1
Original line number Diff line number Diff line
@@ -48,10 +48,16 @@ class AwsJsonFactory(private val version: AwsJsonVersion) : ProtocolGeneratorFac
    override fun transformModel(model: Model): Model = model

    override fun support(): ProtocolSupport = ProtocolSupport(
        /* Client support */
        requestSerialization = true,
        requestBodySerialization = true,
        responseDeserialization = true,
        errorDeserialization = true
        errorDeserialization = true,
        /* Server support */
        requestDeserialization = false,
        requestBodyDeserialization = false,
        responseSerialization = false,
        errorSerialization = false
    )
}

+6 −0
Original line number Diff line number Diff line
@@ -36,10 +36,16 @@ class AwsQueryFactory : ProtocolGeneratorFactory<HttpBoundProtocolGenerator> {

    override fun support(): ProtocolSupport {
        return ProtocolSupport(
            /* Client support */
            requestSerialization = true,
            requestBodySerialization = true,
            responseDeserialization = true,
            errorDeserialization = true,
            /* Server support */
            requestDeserialization = false,
            requestBodyDeserialization = false,
            responseSerialization = false,
            errorSerialization = false
        )
    }
}
Loading