Skip to content

Commit e605b61

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

File tree

11 files changed

+280
-131
lines changed

11 files changed

+280
-131
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: 14 additions & 2 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>",
@@ -19,21 +19,33 @@ metrique-writer = "0.1.17"
1919
tower = "0.4.13"
2020
futures = "0.3"
2121
http = "1.3.1"
22+
http-02 = { package = "http", version = "0.2", optional = true }
2223
http-body = "1.0.1"
24+
http-body-04 = { package = "http-body", version = "0.4", optional = true }
2325
hyper = "1.6.0"
26+
hyper-014 = { package = "hyper", version = "0.14", optional = true }
2427
thiserror = "2"
2528
pin-project-lite = "0.2.14"
2629
tracing = "0.1.44"
2730

28-
aws-smithy-http-server = { path = "../aws-smithy-http-server", features = [
31+
aws-smithy-http-server-latest = { package = "aws-smithy-http-server", path = "../aws-smithy-http-server", features = [
2932
"request-id",
3033
] }
34+
aws-smithy-http-server-065 = { package = "aws-smithy-http-server", version = "0.65", optional = true, features = ["request-id"] }
3135
aws-smithy-http-server-metrics-macro = { path = "../aws-smithy-http-server-metrics-macro" }
3236

3337
[dev-dependencies]
3438
tracing-appender = "0.2"
3539
metrique-writer-format-emf = "0.1.16"
3640

41+
[features]
42+
aws-smithy-http-server-065 = [
43+
"dep:aws-smithy-http-server-065",
44+
"dep:http-02",
45+
"dep:hyper-014",
46+
"dep:http-body-04"
47+
]
48+
3749
[package.metadata.docs.rs]
3850
all-features = true
3951
targets = ["x86_64-unknown-linux-gnu"]

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/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();

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ use std::sync::atomic::Ordering;
1010
use std::task::Context;
1111
use std::task::Poll;
1212

13-
use http::Request;
14-
use http::Response;
1513
use pin_project_lite::pin_project;
1614
use tower::Service;
1715

@@ -22,8 +20,8 @@ use crate::traits::InitMetrics;
2220
use crate::traits::ResponseMetrics;
2321
use crate::traits::ThreadSafeCloseEntry;
2422
use crate::traits::ThreadSafeEntrySink;
25-
use crate::types::ReqBody;
26-
use crate::types::ResBody;
23+
use crate::types::HttpRequest;
24+
use crate::types::HttpResponse;
2725

2826
pin_project! {
2927
/// Future returned by [`MetricsLayerService`].
@@ -46,12 +44,12 @@ pin_project! {
4644

4745
impl<F, Entry, Sink, Res, Err> Future for MetricsLayerServiceFuture<F, Entry, Sink, Res>
4846
where
49-
F: Future<Output = Result<Response<ResBody>, Err>>,
47+
F: Future<Output = Result<HttpResponse, Err>>,
5048
Entry: ThreadSafeCloseEntry,
5149
Sink: ThreadSafeEntrySink<Entry>,
5250
Res: ResponseMetrics<Entry>,
5351
{
54-
type Output = Result<Response<ResBody>, Err>;
52+
type Output = Result<HttpResponse, Err>;
5553

5654
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
5755
// for safely accessing the pinned inner future
@@ -95,7 +93,7 @@ where
9593
pub(crate) init_metrics: Init,
9694
pub(crate) response_metrics: Option<Res>,
9795
pub(crate) default_metrics_extension_fn: fn(
98-
&mut Request<ReqBody>,
96+
&mut HttpRequest,
9997
&mut Entry,
10098
DefaultRequestMetricsConfig,
10199
DefaultResponseMetricsConfig,
@@ -129,10 +127,10 @@ where
129127
}
130128
}
131129
}
132-
impl<Ser, Entry, Sink, Init, Res> Service<Request<ReqBody>>
130+
impl<Ser, Entry, Sink, Init, Res> Service<HttpRequest>
133131
for MetricsLayerService<Ser, Entry, Sink, Init, Res>
134132
where
135-
Ser: Service<Request<ReqBody>, Response = Response<ResBody>> + Clone,
133+
Ser: Service<HttpRequest, Response = HttpResponse> + Clone,
136134
Ser::Future: Send + 'static,
137135
Entry: ThreadSafeCloseEntry,
138136
Sink: ThreadSafeEntrySink<Entry>,
@@ -147,7 +145,7 @@ where
147145
self.inner.poll_ready(cx)
148146
}
149147

150-
fn call(&mut self, mut req: Request<ReqBody>) -> Self::Future {
148+
fn call(&mut self, mut req: HttpRequest) -> Self::Future {
151149
let mut metrics = (self.init_metrics)(&mut req);
152150

153151
self.default_service_state

0 commit comments

Comments
 (0)