From f90b8d3cf6e09eaa518aefab5f7d48f0e937b76c Mon Sep 17 00:00:00 2001 From: Wolfus20 Date: Tue, 9 Jan 2024 16:23:11 +0800 Subject: [PATCH 1/3] Add default generic parameters for trace::{ResponseBody, ResponseFuture} Fixes: #233 --- tower-http/src/trace/body.rs | 4 ++-- tower-http/src/trace/future.rs | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/tower-http/src/trace/body.rs b/tower-http/src/trace/body.rs index 7a27cd90..d713f243 100644 --- a/tower-http/src/trace/body.rs +++ b/tower-http/src/trace/body.rs @@ -1,4 +1,4 @@ -use super::{OnBodyChunk, OnEos, OnFailure}; +use super::{DefaultOnBodyChunk, DefaultOnEos, DefaultOnFailure, OnBodyChunk, OnEos, OnFailure}; use crate::classify::ClassifyEos; use http_body::{Body, Frame}; use pin_project_lite::pin_project; @@ -14,7 +14,7 @@ pin_project! { /// Response body for [`Trace`]. /// /// [`Trace`]: super::Trace - pub struct ResponseBody { + pub struct ResponseBody { #[pin] pub(crate) inner: B, pub(crate) classify_eos: Option, diff --git a/tower-http/src/trace/future.rs b/tower-http/src/trace/future.rs index feac51bf..e205ea32 100644 --- a/tower-http/src/trace/future.rs +++ b/tower-http/src/trace/future.rs @@ -1,4 +1,7 @@ -use super::{OnBodyChunk, OnEos, OnFailure, OnResponse, ResponseBody}; +use super::{ + DefaultOnBodyChunk, DefaultOnEos, DefaultOnFailure, DefaultOnResponse, OnBodyChunk, OnEos, + OnFailure, OnResponse, ResponseBody, +}; use crate::classify::{ClassifiedResponse, ClassifyResponse}; use http::Response; use http_body::Body; @@ -15,7 +18,7 @@ pin_project! { /// Response future for [`Trace`]. /// /// [`Trace`]: super::Trace - pub struct ResponseFuture { + pub struct ResponseFuture { #[pin] pub(crate) inner: F, pub(crate) span: Span, From fab3fa03df4bf76d8ca7dad4f1d108785b89d160 Mon Sep 17 00:00:00 2001 From: Wolfus20 Date: Tue, 9 Jan 2024 17:34:53 +0800 Subject: [PATCH 2/3] Add and implement HttpMakeClassifier and GrpcMakeClassifier type aliases Fixes: #233 --- tower-http/src/builder.rs | 13 ++++--------- tower-http/src/trace/layer.rs | 6 +++--- tower-http/src/trace/mod.rs | 11 ++++++++++- tower-http/src/trace/service.rs | 8 ++++---- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/tower-http/src/builder.rs b/tower-http/src/builder.rs index d8d14aa0..4c27a95c 100644 --- a/tower-http/src/builder.rs +++ b/tower-http/src/builder.rs @@ -1,8 +1,5 @@ use tower::ServiceBuilder; -#[cfg(feature = "trace")] -use crate::classify::{GrpcErrorsAsFailures, ServerErrorsAsFailures, SharedClassifier}; - #[allow(unused_imports)] use http::header::HeaderName; #[allow(unused_imports)] @@ -126,7 +123,7 @@ pub trait ServiceBuilderExt: crate::sealed::Sealed + Sized { #[cfg(feature = "trace")] fn trace_for_http( self, - ) -> ServiceBuilder>, L>>; + ) -> ServiceBuilder, L>>; /// High level tracing that classifies responses using gRPC headers. /// @@ -140,7 +137,7 @@ pub trait ServiceBuilderExt: crate::sealed::Sealed + Sized { #[cfg(feature = "trace")] fn trace_for_grpc( self, - ) -> ServiceBuilder>, L>>; + ) -> ServiceBuilder, L>>; /// Follow redirect resposes using the [`Standard`] policy. /// @@ -427,16 +424,14 @@ impl ServiceBuilderExt for ServiceBuilder { #[cfg(feature = "trace")] fn trace_for_http( self, - ) -> ServiceBuilder>, L>> - { + ) -> ServiceBuilder, L>> { self.layer(crate::trace::TraceLayer::new_for_http()) } #[cfg(feature = "trace")] fn trace_for_grpc( self, - ) -> ServiceBuilder>, L>> - { + ) -> ServiceBuilder, L>> { self.layer(crate::trace::TraceLayer::new_for_grpc()) } diff --git a/tower-http/src/trace/layer.rs b/tower-http/src/trace/layer.rs index 7314f754..21ff321c 100644 --- a/tower-http/src/trace/layer.rs +++ b/tower-http/src/trace/layer.rs @@ -1,6 +1,6 @@ use super::{ DefaultMakeSpan, DefaultOnBodyChunk, DefaultOnEos, DefaultOnFailure, DefaultOnRequest, - DefaultOnResponse, Trace, + DefaultOnResponse, GrpcMakeClassifier, HttpMakeClassifier, Trace, }; use crate::classify::{ GrpcErrorsAsFailures, MakeClassifier, ServerErrorsAsFailures, SharedClassifier, @@ -176,7 +176,7 @@ impl } } -impl TraceLayer> { +impl TraceLayer { /// Create a new [`TraceLayer`] using [`ServerErrorsAsFailures`] which supports classifying /// regular HTTP responses based on the status code. pub fn new_for_http() -> Self { @@ -192,7 +192,7 @@ impl TraceLayer> { } } -impl TraceLayer> { +impl TraceLayer { /// Create a new [`TraceLayer`] using [`GrpcErrorsAsFailures`] which supports classifying /// gRPC responses and streams based on the `grpc-status` header. pub fn new_for_grpc() -> Self { diff --git a/tower-http/src/trace/mod.rs b/tower-http/src/trace/mod.rs index 255bb703..0b57a18d 100644 --- a/tower-http/src/trace/mod.rs +++ b/tower-http/src/trace/mod.rs @@ -400,7 +400,16 @@ pub use self::{ on_response::{DefaultOnResponse, OnResponse}, service::Trace, }; -use crate::LatencyUnit; +use crate::{ + classify::{GrpcErrorsAsFailures, ServerErrorsAsFailures, SharedClassifier}, + LatencyUnit, +}; + +/// MakeClassifier for HTTP requests. +pub type HttpMakeClassifier = SharedClassifier; + +/// MakeClassifier for gRPC requests. +pub type GrpcMakeClassifier = SharedClassifier; macro_rules! event_dynamic_lvl { ( $(target: $target:expr,)? $(parent: $parent:expr,)? $lvl:expr, $($tt:tt)* ) => { diff --git a/tower-http/src/trace/service.rs b/tower-http/src/trace/service.rs index f58172f3..1ab4c1f0 100644 --- a/tower-http/src/trace/service.rs +++ b/tower-http/src/trace/service.rs @@ -1,7 +1,7 @@ use super::{ DefaultMakeSpan, DefaultOnBodyChunk, DefaultOnEos, DefaultOnFailure, DefaultOnRequest, - DefaultOnResponse, MakeSpan, OnBodyChunk, OnEos, OnFailure, OnRequest, OnResponse, - ResponseBody, ResponseFuture, TraceLayer, + DefaultOnResponse, GrpcMakeClassifier, HttpMakeClassifier, MakeSpan, OnBodyChunk, OnEos, + OnFailure, OnRequest, OnResponse, ResponseBody, ResponseFuture, TraceLayer, }; use crate::classify::{ GrpcErrorsAsFailures, MakeClassifier, ServerErrorsAsFailures, SharedClassifier, @@ -207,7 +207,7 @@ impl impl Trace< S, - SharedClassifier, + HttpMakeClassifier, DefaultMakeSpan, DefaultOnRequest, DefaultOnResponse, @@ -235,7 +235,7 @@ impl impl Trace< S, - SharedClassifier, + GrpcMakeClassifier, DefaultMakeSpan, DefaultOnRequest, DefaultOnResponse, From e4d98fab76c931f3ba75c28e7d966a80dbf75f68 Mon Sep 17 00:00:00 2001 From: Wolfus20 Date: Sun, 14 Jan 2024 20:36:24 +0800 Subject: [PATCH 3/3] Add CHANGELOG entry for PR #455 --- tower-http/CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tower-http/CHANGELOG.md b/tower-http/CHANGELOG.md index ddb718c9..5cf4d2ce 100644 --- a/tower-http/CHANGELOG.md +++ b/tower-http/CHANGELOG.md @@ -9,7 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Added -- None. +- **trace:** Add default generic parameters for `ResponseBody` and `ResponseFuture` ([#455]) +- **trace:** Add type aliases `HttpMakeClassifier` and `GrpcMakeClassifier` ([#455]) ## Changed @@ -23,6 +24,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - None. +[#455]: https://github.com/tower-rs/tower-http/pull/455 + # 0.5.0 (November 21, 2023) ## Changed