@@ -77,6 +77,7 @@ pin_project_lite::pin_project! {
77
77
trailers_receiver: Option <sync:: Receiver <Trailers >>,
78
78
upgrade_sender: Option <sync:: Sender <upgrade:: Connection >>,
79
79
upgrade_receiver: Option <sync:: Receiver <upgrade:: Connection >>,
80
+ is_upgrade: bool ,
80
81
#[ pin]
81
82
body: Body ,
82
83
ext: Extensions ,
@@ -131,6 +132,7 @@ impl Response {
131
132
trailers_receiver : Some ( trailers_receiver) ,
132
133
upgrade_sender : Some ( upgrade_sender) ,
133
134
upgrade_receiver : Some ( upgrade_receiver) ,
135
+ is_upgrade : false ,
134
136
ext : Extensions :: new ( ) ,
135
137
peer_addr : None ,
136
138
local_addr : None ,
@@ -542,6 +544,7 @@ impl Response {
542
544
#[ cfg( feature = "unstable" ) ]
543
545
#[ cfg_attr( feature = "docs" , doc( cfg( unstable) ) ) ]
544
546
pub fn send_upgrade ( & mut self ) -> upgrade:: Sender {
547
+ self . is_upgrade = true ;
545
548
let sender = self
546
549
. upgrade_sender
547
550
. take ( )
@@ -553,13 +556,21 @@ impl Response {
553
556
#[ cfg( feature = "unstable" ) ]
554
557
#[ cfg_attr( feature = "docs" , doc( cfg( unstable) ) ) ]
555
558
pub async fn recv_upgrade ( & mut self ) -> upgrade:: Receiver {
559
+ self . is_upgrade = true ;
556
560
let receiver = self
557
561
. upgrade_receiver
558
562
. take ( )
559
563
. expect ( "Upgrade receiver can only be constructed once" ) ;
560
564
upgrade:: Receiver :: new ( receiver)
561
565
}
562
566
567
+ /// Returns `true` if a protocol upgrade is in progress.
568
+ #[ cfg( feature = "unstable" ) ]
569
+ #[ cfg_attr( feature = "docs" , doc( cfg( unstable) ) ) ]
570
+ pub fn is_upgrade ( & self ) -> bool {
571
+ self . is_upgrade
572
+ }
573
+
563
574
/// An iterator visiting all header pairs in arbitrary order.
564
575
pub fn iter ( & self ) -> headers:: Iter < ' _ > {
565
576
self . headers . iter ( )
@@ -620,6 +631,8 @@ impl Clone for Response {
620
631
upgrade_sender : self . upgrade_sender . clone ( ) ,
621
632
#[ cfg( feature = "unstable" ) ]
622
633
upgrade_receiver : self . upgrade_receiver . clone ( ) ,
634
+ #[ cfg( feature = "unstable" ) ]
635
+ is_upgrade : false ,
623
636
body : Body :: empty ( ) ,
624
637
ext : Extensions :: new ( ) ,
625
638
peer_addr : self . peer_addr . clone ( ) ,
0 commit comments