diff --git a/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerServiceGeneratorV2.kt b/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerServiceGeneratorV2.kt
index 3f44b9d671..eb44ffab1d 100644
--- a/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerServiceGeneratorV2.kt
+++ b/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/ServerServiceGeneratorV2.kt
@@ -152,7 +152,7 @@ class ServerServiceGeneratorV2(
private val buildConstraints = operations.zip(builderOps).zip(extensionTypes).map { (first, exts) ->
val (operation, type) = first
// TODO(https://github.com/awslabs/smithy-rs/issues/1713#issue-1365169734): The `Error = Infallible` is an
- // excess requirement to stay at parity with existing builder.
+ // excess requirement to stay at parity with existing builder.
writable {
rustTemplate(
"""
@@ -162,11 +162,7 @@ class ServerServiceGeneratorV2(
$exts,
B,
Pl,
- >,
- $type::Service: Clone + Send + 'static,
- <$type::Service as #{Tower}::Service<#{Http}::Request>>::Future: Send + 'static,
-
- $type::Service: #{Tower}::Service<#{Http}::Request, Error = std::convert::Infallible>
+ >
""",
"Marker" to protocol.markerStruct(),
*codegenScope,
diff --git a/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocol.kt b/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocol.kt
index 73f3fd1dac..2dea2153b2 100644
--- a/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocol.kt
+++ b/codegen-server/src/main/kotlin/software/amazon/smithy/rust/codegen/server/smithy/generators/protocol/ServerProtocol.kt
@@ -123,7 +123,7 @@ class ServerAwsJsonProtocol(
"""
(
String::from("$serviceName.$operationName"),
- #{SmithyHttpServer}::routing::Route::new(#{OperationValue:W})
+ #{OperationValue:W}
),
""",
"OperationValue" to operationValue,
@@ -184,7 +184,7 @@ private fun restRouterConstruction(
"""
(
#{Key:W},
- #{SmithyHttpServer}::routing::Route::new(#{OperationValue:W})
+ #{OperationValue:W}
),
""",
"Key" to key,
diff --git a/rust-runtime/aws-smithy-http-server/src/operation/upgrade.rs b/rust-runtime/aws-smithy-http-server/src/operation/upgrade.rs
index 5028231e21..ff12e55005 100644
--- a/rust-runtime/aws-smithy-http-server/src/operation/upgrade.rs
+++ b/rust-runtime/aws-smithy-http-server/src/operation/upgrade.rs
@@ -21,6 +21,7 @@ use crate::{
plugin::Plugin,
request::{FromParts, FromRequest},
response::IntoResponse,
+ routing::Route,
runtime_error::InternalFailureException,
};
@@ -70,9 +71,6 @@ impl Layer for UpgradeLayer
{ } } -/// An alias allowing for quick access to [`UpgradeLayer`]s target [`Service`]. -pub type UpgradedService
= >::Service>,
+>>::Service;
+
impl Upgradable for Operation Upgradable for FailOnMissingOperation
where
InternalFailureException: IntoResponse ,
+ P: 'static,
{
- type Service = MissingFailure ;
-
- fn upgrade(self, _plugin: &Pl) -> Self::Service {
- MissingFailure { _protocol: PhantomData }
+ fn upgrade(self, _plugin: &Pl) -> Route {
+ Route::new(MissingFailure { _protocol: PhantomData })
}
}
/// A [`Service`] which always returns an internal failure message and logs an error.
+#[derive(Copy)]
pub struct MissingFailure {
- _protocol: PhantomData ,
+ _protocol: PhantomData Clone for MissingFailure {
>::Service;
-
/// A [`Service`] responsible for wrapping an operation [`Service`] accepting and returning Smithy
/// types, and converting it into a [`Service`] accepting and returning [`http`] types.
pub struct Upgrade
where
// `Op` is used to specify the operation shape
@@ -255,17 +255,20 @@ where
// The signature of the output is correct
`](Operation), applies [`Plugin`], then applies [`UpgradeLayer`] to
/// the modified `S`, then finally applies the modified `L`.
///
/// The composition is made explicit in the method constraints and return type.
- fn upgrade(self, plugin: &Pl) -> Self::Service {
+ fn upgrade(self, plugin: &Pl) -> Route {
let mapped = plugin.map(self);
let layer = Stack::new(UpgradeLayer::new(), mapped.layer);
- layer.layer(mapped.inner)
+ Route::new(layer.layer(mapped.inner))
}
}
@@ -282,17 +285,17 @@ pub struct FailOnMissingOperation;
impl