diff --git a/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerServiceGenerator.kt b/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerServiceGenerator.kt index e1da585d05..d9dabb880e 100644 --- a/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerServiceGenerator.kt +++ b/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerServiceGenerator.kt @@ -488,7 +488,16 @@ class ServerServiceGenerator( /// /// See the [root](crate) documentation for more information. ##[derive(Clone)] - pub struct $serviceName { + pub struct $serviceName< + S = #{SmithyHttpServer}::routing::RoutingService< + #{Router}< + #{SmithyHttpServer}::routing::Route< + #{SmithyHttpServer}::body::BoxBody + >, + >, + #{Protocol}, + > + > { // This is the router wrapped by layers. svc: S, } diff --git a/codegen-server/src/test/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerServiceGeneratorTest.kt b/codegen-server/src/test/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerServiceGeneratorTest.kt new file mode 100644 index 0000000000..6e110f9641 --- /dev/null +++ b/codegen-server/src/test/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerServiceGeneratorTest.kt @@ -0,0 +1,39 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +package software.amazon.smithy.rust.codegen.server.smithy.generators + +import org.junit.jupiter.api.Test +import software.amazon.smithy.rust.codegen.core.rustlang.rust +import software.amazon.smithy.rust.codegen.core.testutil.asSmithyModel +import software.amazon.smithy.rust.codegen.core.testutil.testModule +import software.amazon.smithy.rust.codegen.server.smithy.testutil.serverIntegrationTest +import java.io.File + +internal class ServerServiceGeneratorTest { + /** + * See . + */ + @Test + fun `one should be able to return a built service from a function`() { + val model = File("../codegen-core/common-test-models/simple.smithy").readText().asSmithyModel() + + serverIntegrationTest(model) { _, rustCrate -> + rustCrate.testModule { + // No actual tests: we just want to check that this compiles. + rust( + """ + fn _build_service() -> crate::SimpleService { + let config = crate::SimpleServiceConfig::builder().build(); + let service = crate::SimpleService::builder(config).build_unchecked(); + + service.boxed() + } + """, + ) + } + } + } +}