Skip to content

Commit 321ae7d

Browse files
committed
Support for aws-smithy-http-server 0.65
1 parent 1190432 commit 321ae7d

File tree

13 files changed

+291
-140
lines changed

13 files changed

+291
-140
lines changed

rust-runtime/Cargo.lock

Lines changed: 193 additions & 56 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust-runtime/aws-smithy-http-server-metrics-macro/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ proc-macro = true
33

44
[package]
55
name = "aws-smithy-http-server-metrics-macro"
6-
version = "0.1.0"
6+
version = "0.1.1"
77
authors = [
88
"AWS Rust SDK Team <aws-sdk-rust@amazon.com>",
99
"Jason Gin <jasgin@amazon.com>",

rust-runtime/aws-smithy-http-server-metrics-macro/src/macro_impl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ fn generate_ext_trait_impl(
142142
{
143143
fn build(self) -> aws_smithy_http_server_metrics::layer::MetricsLayer<#struct_ident, Sink, Init, Res> {
144144
let default_metrics_extension_fn =
145-
|req: &mut http::Request<aws_smithy_http_server_metrics::types::ReqBody>,
145+
|req: &mut aws_smithy_http_server_metrics::types::HttpRequest,
146146
metrics: &mut #struct_ident,
147147
req_config: aws_smithy_http_server_metrics::default::DefaultRequestMetricsConfig,
148148
res_config: aws_smithy_http_server_metrics::default::DefaultResponseMetricsConfig,

rust-runtime/aws-smithy-http-server-metrics/Cargo.toml

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "aws-smithy-http-server-metrics"
3-
version = "0.1.0"
3+
version = "0.1.1"
44
authors = [
55
"AWS Rust SDK Team <aws-sdk-rust@amazon.com>",
66
"Jason Gin <jasgin@amazon.com>",
@@ -12,28 +12,42 @@ repository = "https://github.com/smithy-lang/smithy-rs"
1212
rust-version = "1.91"
1313

1414
[dependencies]
15-
metrique = "0.1.17"
16-
metrique-core = "0.1.15"
17-
metrique-writer = "0.1.17"
18-
19-
tower = "0.4.13"
20-
futures = "0.3"
15+
aws-smithy-http-server = { path = "../aws-smithy-http-server", features = [
16+
"request-id",
17+
] }
18+
aws-smithy-http-server-metrics-macro = { path = "../aws-smithy-http-server-metrics-macro" }
2119
http = "1.3.1"
2220
http-body = "1.0.1"
2321
hyper = "1.6.0"
24-
thiserror = "2"
22+
futures = "0.3"
23+
metrique = "0.1.17"
24+
metrique-core = "0.1.15"
25+
metrique-writer = "0.1.17"
2526
pin-project-lite = "0.2.14"
27+
thiserror = "2"
28+
tower = "0.4.13"
2629
tracing = "0.1.44"
2730

28-
aws-smithy-http-server = { path = "../aws-smithy-http-server", features = [
31+
# Optional dependencies for aws-smithy-http-server 0.65 support
32+
aws-smithy-http-server-065 = { package = "aws-smithy-http-server", version = "0.65", optional = true, features = [
2933
"request-id",
3034
] }
31-
aws-smithy-http-server-metrics-macro = { path = "../aws-smithy-http-server-metrics-macro" }
35+
http-02 = { package = "http", version = "0.2", optional = true }
36+
http-body-04 = { package = "http-body", version = "0.4", optional = true }
37+
hyper-014 = { package = "hyper", version = "0.14", optional = true }
3238

3339
[dev-dependencies]
3440
tracing-appender = "0.2"
3541
metrique-writer-format-emf = "0.1.16"
3642

43+
[features]
44+
aws-smithy-http-server-065 = [
45+
"dep:aws-smithy-http-server-065",
46+
"dep:http-02",
47+
"dep:hyper-014",
48+
"dep:http-body-04",
49+
]
50+
3751
[package.metadata.docs.rs]
3852
all-features = true
3953
targets = ["x86_64-unknown-linux-gnu"]

rust-runtime/aws-smithy-http-server-metrics/logs/pokemon_service_metrics.2026-02-20-20-49

Whitespace-only changes.

rust-runtime/aws-smithy-http-server-metrics/src/layer.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
use std::marker::PhantomData;
77

8-
use http::Request;
98
use metrique::DefaultSink;
109
use metrique::ServiceMetrics;
1110
use metrique_writer::GlobalEntrySink;
@@ -26,7 +25,7 @@ use crate::traits::ThreadSafeCloseEntry;
2625
use crate::traits::ThreadSafeEntrySink;
2726
use crate::types::DefaultInit;
2827
use crate::types::DefaultRs;
29-
use crate::types::ReqBody;
28+
use crate::types::HttpRequest;
3029

3130
pub mod builder;
3231

@@ -100,7 +99,7 @@ pub struct MetricsLayer<
10099
pub(crate) init_metrics: Init,
101100
pub(crate) response_metrics: Option<Res>,
102101
pub(crate) default_metrics_extension_fn: fn(
103-
&mut Request<ReqBody>,
102+
&mut HttpRequest,
104103
&mut Entry,
105104
DefaultRequestMetricsConfig,
106105
DefaultResponseMetricsConfig,
@@ -134,7 +133,7 @@ where
134133
init_metrics: Init,
135134
response_metrics: Option<Res>,
136135
default_metrics_extension_fn: fn(
137-
&mut Request<ReqBody>,
136+
&mut HttpRequest,
138137
&mut Entry,
139138
DefaultRequestMetricsConfig,
140139
DefaultResponseMetricsConfig,

rust-runtime/aws-smithy-http-server-metrics/src/layer/builder.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use std::marker::PhantomData;
77
use std::sync::Arc;
88
use std::sync::Mutex;
99

10-
use http::Request;
1110
use metrique::DefaultSink;
1211
use metrique::OnParentDrop;
1312
use metrique::Slot;
@@ -28,7 +27,7 @@ use crate::traits::ThreadSafeCloseEntry;
2827
use crate::traits::ThreadSafeEntrySink;
2928
use crate::types::DefaultInit;
3029
use crate::types::DefaultRs;
31-
use crate::types::ReqBody;
30+
use crate::types::HttpRequest;
3231

3332
// Macro to generate disable methods for configuration
3433
macro_rules! impl_disable_methods {
@@ -217,7 +216,7 @@ macro_rules! impl_build_for_state {
217216
{
218217
fn build(self) -> MetricsLayer<DefaultMetrics, Sink, Init, Res> {
219218
let default_metrics_extension_fn =
220-
|req: &mut Request<ReqBody>,
219+
|req: &mut HttpRequest,
221220
metrics: &mut DefaultMetrics,
222221
req_config: DefaultRequestMetricsConfig,
223222
res_config: DefaultResponseMetricsConfig,
@@ -275,14 +274,13 @@ impl_build_for_state!(WithRqAndRs);
275274

276275
#[cfg(test)]
277276
mod tests {
278-
use http::Response;
279277
use metrique::AppendAndCloseOnDrop;
280278
use metrique::ServiceMetrics;
281279
use metrique_writer::GlobalEntrySink;
282280

283281
use super::*;
284282
use crate::layer::MetricsLayer;
285-
use crate::types::ResBody;
283+
use crate::types::HttpResponse;
286284

287285
// Compile-time guarantees that methods exist on the correct states
288286
macro_rules! assert_methods_callable {
@@ -314,13 +312,11 @@ mod tests {
314312
assert_state!(assert_with_rq, WithRq);
315313
assert_state!(assert_with_rq_and_rs, WithRqAndRs);
316314

317-
fn dummy_init(
318-
_req: &mut Request<ReqBody>,
319-
) -> AppendAndCloseOnDrop<DefaultMetrics, DefaultSink> {
315+
fn dummy_init(_req: &mut HttpRequest) -> AppendAndCloseOnDrop<DefaultMetrics, DefaultSink> {
320316
DefaultMetrics::default().append_on_drop(ServiceMetrics::sink())
321317
}
322318

323-
fn dummy_response_fn(_res: &mut Response<ResBody>, _metrics: &mut DefaultMetrics) {}
319+
fn dummy_response_fn(_res: &mut HttpResponse, _metrics: &mut DefaultMetrics) {}
324320

325321
#[test]
326322
fn test_needs_initialization_state() {

rust-runtime/aws-smithy-http-server-metrics/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
//! [`DefaultMetricsPlugin`] automatically collects standard metrics for every request at operation time.
1515
//! See the Collected Metrics section below:
1616
//!
17-
//! ```rust
17+
//! ```rust, ignore
1818
//! use aws_smithy_http_server_metrics::plugin::DefaultMetricsPlugin;
1919
//! use aws_smithy_http_server::plugin::HttpPlugins;
2020
//!

rust-runtime/aws-smithy-http-server-metrics/src/operation.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,18 @@ use std::ops::DerefMut;
2525
use std::sync::Arc;
2626
use std::sync::Mutex;
2727

28-
use aws_smithy_http_server::body::empty;
29-
use aws_smithy_http_server::request::FromParts;
30-
use aws_smithy_http_server::response::IntoResponse;
31-
use http::StatusCode;
3228
use metrique::OnParentDrop;
3329
use metrique::Slot;
3430
use metrique::SlotGuard;
3531
use thiserror::Error;
3632

3733
use crate::traits::ThreadSafeCloseEntry;
34+
use crate::types::aws_smithy_http_server::request::FromParts;
35+
use crate::types::aws_smithy_http_server::response::IntoResponse;
36+
use crate::types::empty_response_body;
37+
use crate::types::HttpRequestParts;
38+
use crate::types::HttpResponse;
39+
use crate::types::HttpStatusCode;
3840

3941
/// Type for metrics that can be extracted in operation handlers.
4042
///
@@ -116,7 +118,7 @@ where
116118
{
117119
type Rejection = MetricsError;
118120

119-
fn from_parts(parts: &mut http::request::Parts) -> Result<Self, Self::Rejection> {
121+
fn from_parts(parts: &mut HttpRequestParts) -> Result<Self, Self::Rejection> {
120122
// Get a reference to the MetricsInExtensions without removing it from the request.
121123
// This keeps the outer guard alive in the extensions.
122124
let Some(metrics_slot) = parts.extensions.get::<MetricsExtension<T>>() else {
@@ -181,9 +183,9 @@ pub enum MetricsError {
181183
}
182184

183185
impl<Protocol> IntoResponse<Protocol> for MetricsError {
184-
fn into_response(self) -> http::Response<aws_smithy_http_server::body::BoxBody> {
185-
let mut response = http::Response::new(empty());
186-
*response.status_mut() = StatusCode::INTERNAL_SERVER_ERROR;
186+
fn into_response(self) -> HttpResponse {
187+
let mut response = HttpResponse::new(empty_response_body());
188+
*response.status_mut() = HttpStatusCode::INTERNAL_SERVER_ERROR;
187189
response
188190
}
189191
}

rust-runtime/aws-smithy-http-server-metrics/src/plugin.rs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,6 @@ use std::task::Context;
1010
use std::task::Poll;
1111
use std::time::Duration;
1212

13-
use aws_smithy_http_server::operation::OperationShape;
14-
use aws_smithy_http_server::plugin::HttpMarker;
15-
use aws_smithy_http_server::plugin::Plugin;
16-
use aws_smithy_http_server::request::request_id::ServerRequestId;
17-
use aws_smithy_http_server::service::ServiceShape;
18-
use http::Request;
19-
use http::Response;
2013
use metrique::timers::OwnedTimerGuard;
2114
use metrique::timers::Stopwatch;
2215
use metrique::OnParentDrop;
@@ -33,8 +26,13 @@ use crate::default::DefaultRequestMetrics;
3326
use crate::default::DefaultResponseMetrics;
3427
use crate::default::DefaultResponseMetricsConfig;
3528
use crate::default::DefaultResponseMetricsExtension;
36-
use crate::types::ReqBody;
37-
use crate::types::ResBody;
29+
use crate::types::aws_smithy_http_server::operation::OperationShape;
30+
use crate::types::aws_smithy_http_server::plugin::HttpMarker;
31+
use crate::types::aws_smithy_http_server::plugin::Plugin;
32+
use crate::types::aws_smithy_http_server::request::request_id::ServerRequestId;
33+
use crate::types::aws_smithy_http_server::service::ServiceShape;
34+
use crate::types::HttpRequest;
35+
use crate::types::HttpResponse;
3836

3937
pin_project! {
4038
/// Future returned by [`DefaultMetricsPluginService`].
@@ -66,9 +64,9 @@ pin_project! {
6664

6765
impl<F, Err> Future for DefaultMetricsFuture<F>
6866
where
69-
F: Future<Output = Result<Response<ResBody>, Err>>,
67+
F: Future<Output = Result<HttpResponse, Err>>,
7068
{
71-
type Output = Result<Response<ResBody>, Err>;
69+
type Output = Result<HttpResponse, Err>;
7270

7371
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
7472
match self.project() {
@@ -206,13 +204,13 @@ where
206204
}
207205
impl<Ser> DefaultMetricsPluginService<Ser>
208206
where
209-
Ser: Service<Request<ReqBody>, Response = Response<ResBody>>,
207+
Ser: Service<HttpRequest, Response = HttpResponse>,
210208
Ser::Future: Send + 'static,
211209
{
212210
/// Gets the default request metrics that can be retrieved from the request object directly
213211
///
214212
/// Assigns None to those that need information from the outer metrics layer to be set
215-
fn get_default_request_metrics(&self, req: &Request<ReqBody>) -> DefaultRequestMetrics {
213+
fn get_default_request_metrics(&self, req: &HttpRequest) -> DefaultRequestMetrics {
216214
DefaultRequestMetrics {
217215
service_name: Some(self.service_name.to_string()),
218216
service_version: self.service_version.map(|n| n.to_string()),
@@ -226,16 +224,16 @@ where
226224
}
227225
}
228226

229-
impl<Ser> Service<Request<ReqBody>> for DefaultMetricsPluginService<Ser>
227+
impl<Ser> Service<HttpRequest> for DefaultMetricsPluginService<Ser>
230228
where
231-
Ser: Service<Request<ReqBody>, Response = Response<ResBody>>,
229+
Ser: Service<HttpRequest, Response = HttpResponse>,
232230
Ser::Future: Send + 'static,
233231
{
234232
type Response = Ser::Response;
235233
type Error = Ser::Error;
236234
type Future = DefaultMetricsFuture<Ser::Future>;
237235

238-
fn call(&mut self, mut req: Request<ReqBody>) -> Self::Future {
236+
fn call(&mut self, mut req: HttpRequest) -> Self::Future {
239237
let mut stopwatch = Stopwatch::new();
240238
let operation_timer_guard = stopwatch.start_owned();
241239

@@ -306,7 +304,7 @@ where
306304
}
307305

308306
fn get_default_response_metrics(
309-
res: &Response<ResBody>,
307+
res: &HttpResponse,
310308
operation_time: Option<Duration>,
311309
) -> DefaultResponseMetrics {
312310
let status = res.status();

0 commit comments

Comments
 (0)