Skip to content

Commit 0836aa5

Browse files
authored
Merge pull request #176 from http-rs/patch-trailers
Fix trailers methods
2 parents 2d69613 + 45c7860 commit 0836aa5

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

src/request.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ pin_project_lite::pin_project! {
4040
ext: Extensions,
4141
trailers_sender: Option<sync::Sender<Trailers>>,
4242
trailers_receiver: Option<sync::Receiver<Trailers>>,
43+
has_trailers: bool,
4344
}
4445
}
4546

@@ -63,6 +64,7 @@ impl Request {
6364
local_addr: None,
6465
trailers_receiver: Some(trailers_receiver),
6566
trailers_sender: Some(trailers_sender),
67+
has_trailers: false,
6668
}
6769
}
6870

@@ -542,6 +544,7 @@ impl Request {
542544

543545
/// Sends trailers to the a receiver.
544546
pub fn send_trailers(&mut self) -> trailers::Sender {
547+
self.has_trailers = true;
545548
let sender = self
546549
.trailers_sender
547550
.take()
@@ -550,14 +553,19 @@ impl Request {
550553
}
551554

552555
/// Receive trailers from a sender.
553-
pub async fn recv_trailers(&mut self) -> trailers::Receiver {
556+
pub fn recv_trailers(&mut self) -> trailers::Receiver {
554557
let receiver = self
555558
.trailers_receiver
556559
.take()
557560
.expect("Trailers receiver can only be constructed once");
558561
trailers::Receiver::new(receiver)
559562
}
560563

564+
/// Returns `true` if sending trailers is in progress.
565+
pub fn has_trailers(&self) -> bool {
566+
self.has_trailers
567+
}
568+
561569
/// An iterator visiting all header pairs in arbitrary order.
562570
pub fn iter(&self) -> headers::Iter<'_> {
563571
self.headers.iter()
@@ -873,6 +881,7 @@ impl Clone for Request {
873881
ext: Extensions::new(),
874882
peer_addr: self.peer_addr.clone(),
875883
local_addr: self.local_addr.clone(),
884+
has_trailers: false,
876885
}
877886
}
878887
}

src/response.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ pin_project_lite::pin_project! {
4242
status: StatusCode,
4343
headers: Headers,
4444
version: Option<Version>,
45+
has_trailers: bool,
4546
trailers_sender: Option<sync::Sender<Trailers>>,
4647
trailers_receiver: Option<sync::Receiver<Trailers>>,
4748
#[pin]
@@ -75,6 +76,7 @@ pin_project_lite::pin_project! {
7576
version: Option<Version>,
7677
trailers_sender: Option<sync::Sender<Trailers>>,
7778
trailers_receiver: Option<sync::Receiver<Trailers>>,
79+
has_trailers: bool,
7880
upgrade_sender: Option<sync::Sender<upgrade::Connection>>,
7981
upgrade_receiver: Option<sync::Receiver<upgrade::Connection>>,
8082
has_upgrade: bool,
@@ -105,6 +107,7 @@ impl Response {
105107
body: Body::empty(),
106108
trailers_sender: Some(trailers_sender),
107109
trailers_receiver: Some(trailers_receiver),
110+
has_trailers: false,
108111
ext: Extensions::new(),
109112
peer_addr: None,
110113
local_addr: None,
@@ -130,6 +133,7 @@ impl Response {
130133
body: Body::empty(),
131134
trailers_sender: Some(trailers_sender),
132135
trailers_receiver: Some(trailers_receiver),
136+
has_trailers: false,
133137
upgrade_sender: Some(upgrade_sender),
134138
upgrade_receiver: Some(upgrade_receiver),
135139
has_upgrade: false,
@@ -536,6 +540,7 @@ impl Response {
536540

537541
/// Sends trailers to the a receiver.
538542
pub fn send_trailers(&mut self) -> trailers::Sender {
543+
self.has_trailers = true;
539544
let sender = self
540545
.trailers_sender
541546
.take()
@@ -544,14 +549,19 @@ impl Response {
544549
}
545550

546551
/// Receive trailers from a sender.
547-
pub async fn recv_trailers(&mut self) -> trailers::Receiver {
552+
pub fn recv_trailers(&mut self) -> trailers::Receiver {
548553
let receiver = self
549554
.trailers_receiver
550555
.take()
551556
.expect("Trailers receiver can only be constructed once");
552557
trailers::Receiver::new(receiver)
553558
}
554559

560+
/// Returns `true` if sending trailers is in progress.
561+
pub fn has_trailers(&self) -> bool {
562+
self.has_trailers
563+
}
564+
555565
/// Sends an upgrade connection to the a receiver.
556566
#[cfg(feature = "unstable")]
557567
#[cfg_attr(feature = "docs", doc(cfg(unstable)))]
@@ -640,6 +650,7 @@ impl Clone for Response {
640650
version: self.version.clone(),
641651
trailers_sender: self.trailers_sender.clone(),
642652
trailers_receiver: self.trailers_receiver.clone(),
653+
has_trailers: false,
643654
#[cfg(feature = "unstable")]
644655
upgrade_sender: self.upgrade_sender.clone(),
645656
#[cfg(feature = "unstable")]

0 commit comments

Comments
 (0)