diff --git a/src/request.rs b/src/request.rs index fb007600..c46f0931 100644 --- a/src/request.rs +++ b/src/request.rs @@ -40,6 +40,7 @@ pin_project_lite::pin_project! { ext: Extensions, trailers_sender: Option>, trailers_receiver: Option>, + has_trailers: bool, } } @@ -63,6 +64,7 @@ impl Request { local_addr: None, trailers_receiver: Some(trailers_receiver), trailers_sender: Some(trailers_sender), + has_trailers: false, } } @@ -542,6 +544,7 @@ impl Request { /// Sends trailers to the a receiver. pub fn send_trailers(&mut self) -> trailers::Sender { + self.has_trailers = true; let sender = self .trailers_sender .take() @@ -550,7 +553,7 @@ impl Request { } /// Receive trailers from a sender. - pub async fn recv_trailers(&mut self) -> trailers::Receiver { + pub fn recv_trailers(&mut self) -> trailers::Receiver { let receiver = self .trailers_receiver .take() @@ -558,6 +561,11 @@ impl Request { trailers::Receiver::new(receiver) } + /// Returns `true` if sending trailers is in progress. + pub fn has_trailers(&self) -> bool { + self.has_trailers + } + /// An iterator visiting all header pairs in arbitrary order. pub fn iter(&self) -> headers::Iter<'_> { self.headers.iter() @@ -873,6 +881,7 @@ impl Clone for Request { ext: Extensions::new(), peer_addr: self.peer_addr.clone(), local_addr: self.local_addr.clone(), + has_trailers: false, } } } diff --git a/src/response.rs b/src/response.rs index ad97ca52..1c02ba9e 100644 --- a/src/response.rs +++ b/src/response.rs @@ -42,6 +42,7 @@ pin_project_lite::pin_project! { status: StatusCode, headers: Headers, version: Option, + has_trailers: bool, trailers_sender: Option>, trailers_receiver: Option>, #[pin] @@ -75,6 +76,7 @@ pin_project_lite::pin_project! { version: Option, trailers_sender: Option>, trailers_receiver: Option>, + has_trailers: bool, upgrade_sender: Option>, upgrade_receiver: Option>, has_upgrade: bool, @@ -105,6 +107,7 @@ impl Response { body: Body::empty(), trailers_sender: Some(trailers_sender), trailers_receiver: Some(trailers_receiver), + has_trailers: false, ext: Extensions::new(), peer_addr: None, local_addr: None, @@ -130,6 +133,7 @@ impl Response { body: Body::empty(), trailers_sender: Some(trailers_sender), trailers_receiver: Some(trailers_receiver), + has_trailers: false, upgrade_sender: Some(upgrade_sender), upgrade_receiver: Some(upgrade_receiver), has_upgrade: false, @@ -536,6 +540,7 @@ impl Response { /// Sends trailers to the a receiver. pub fn send_trailers(&mut self) -> trailers::Sender { + self.has_trailers = true; let sender = self .trailers_sender .take() @@ -544,7 +549,7 @@ impl Response { } /// Receive trailers from a sender. - pub async fn recv_trailers(&mut self) -> trailers::Receiver { + pub fn recv_trailers(&mut self) -> trailers::Receiver { let receiver = self .trailers_receiver .take() @@ -552,6 +557,11 @@ impl Response { trailers::Receiver::new(receiver) } + /// Returns `true` if sending trailers is in progress. + pub fn has_trailers(&self) -> bool { + self.has_trailers + } + /// Sends an upgrade connection to the a receiver. #[cfg(feature = "unstable")] #[cfg_attr(feature = "docs", doc(cfg(unstable)))] @@ -640,6 +650,7 @@ impl Clone for Response { version: self.version.clone(), trailers_sender: self.trailers_sender.clone(), trailers_receiver: self.trailers_receiver.clone(), + has_trailers: false, #[cfg(feature = "unstable")] upgrade_sender: self.upgrade_sender.clone(), #[cfg(feature = "unstable")]