Skip to content

Commit e2b8f64

Browse files
committed
Move upgrade methods from Request to Response
1 parent e6421c1 commit e2b8f64

File tree

2 files changed

+101
-97
lines changed

2 files changed

+101
-97
lines changed

src/request.rs

Lines changed: 0 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -16,39 +16,6 @@ use crate::mime::Mime;
1616
use crate::trailers::{self, Trailers};
1717
use crate::{Body, Extensions, Method, StatusCode, Url, Version};
1818

19-
cfg_unstable! {
20-
use crate::upgrade;
21-
}
22-
23-
#[cfg(not(feature = "unstable"))]
24-
pin_project_lite::pin_project! {
25-
/// An HTTP request.
26-
///
27-
/// # Examples
28-
///
29-
/// ```
30-
/// use http_types::{Url, Method, Request};
31-
///
32-
/// let mut req = Request::new(Method::Get, Url::parse("https://example.com").unwrap());
33-
/// req.set_body("Hello, Nori!");
34-
/// ```
35-
#[derive(Debug)]
36-
pub struct Request {
37-
method: Method,
38-
url: Url,
39-
headers: Headers,
40-
version: Option<Version>,
41-
#[pin]
42-
body: Body,
43-
local_addr: Option<String>,
44-
peer_addr: Option<String>,
45-
ext: Extensions,
46-
trailers_sender: Option<sync::Sender<Trailers>>,
47-
trailers_receiver: Option<sync::Receiver<Trailers>>,
48-
}
49-
}
50-
51-
#[cfg(feature = "unstable")]
5219
pin_project_lite::pin_project! {
5320
/// An HTTP request.
5421
///
@@ -73,40 +40,11 @@ pin_project_lite::pin_project! {
7340
ext: Extensions,
7441
trailers_sender: Option<sync::Sender<Trailers>>,
7542
trailers_receiver: Option<sync::Receiver<Trailers>>,
76-
upgrade_sender: Option<sync::Sender<upgrade::Connection>>,
77-
upgrade_receiver: Option<sync::Receiver<upgrade::Connection>>,
7843
}
7944
}
8045

8146
impl Request {
8247
/// Create a new request.
83-
#[cfg(feature = "unstable")]
84-
pub fn new<U>(method: Method, url: U) -> Self
85-
where
86-
U: TryInto<Url>,
87-
U::Error: std::fmt::Debug,
88-
{
89-
let url = url.try_into().expect("Could not convert into a valid url");
90-
let (trailers_sender, trailers_receiver) = sync::channel(1);
91-
let (upgrade_sender, upgrade_receiver) = sync::channel(1);
92-
Self {
93-
method,
94-
url,
95-
headers: Headers::new(),
96-
version: None,
97-
body: Body::empty(),
98-
ext: Extensions::new(),
99-
peer_addr: None,
100-
local_addr: None,
101-
trailers_receiver: Some(trailers_receiver),
102-
trailers_sender: Some(trailers_sender),
103-
upgrade_sender: Some(upgrade_sender),
104-
upgrade_receiver: Some(upgrade_receiver),
105-
}
106-
}
107-
108-
/// Create a new request.
109-
#[cfg(not(feature = "unstable"))]
11048
pub fn new<U>(method: Method, url: U) -> Self
11149
where
11250
U: TryInto<Url>,
@@ -620,28 +558,6 @@ impl Request {
620558
trailers::Receiver::new(receiver)
621559
}
622560

623-
/// Sends an upgrade connection to the a receiver.
624-
#[cfg(feature = "unstable")]
625-
#[cfg_attr(feature = "docs", doc(cfg(unstable)))]
626-
pub fn send_upgrade(&mut self) -> upgrade::Sender {
627-
let sender = self
628-
.upgrade_sender
629-
.take()
630-
.expect("Upgrade sender can only be constructed once");
631-
upgrade::Sender::new(sender)
632-
}
633-
634-
/// Receive an upgraded connection from a sender.
635-
#[cfg(feature = "unstable")]
636-
#[cfg_attr(feature = "docs", doc(cfg(unstable)))]
637-
pub async fn recv_upgrade(&mut self) -> upgrade::Receiver {
638-
let receiver = self
639-
.upgrade_receiver
640-
.take()
641-
.expect("Upgrade receiver can only be constructed once");
642-
upgrade::Receiver::new(receiver)
643-
}
644-
645561
/// An iterator visiting all header pairs in arbitrary order.
646562
pub fn iter(&self) -> headers::Iter<'_> {
647563
self.headers.iter()
@@ -953,10 +869,6 @@ impl Clone for Request {
953869
version: self.version.clone(),
954870
trailers_sender: None,
955871
trailers_receiver: None,
956-
#[cfg(feature = "unstable")]
957-
upgrade_sender: None,
958-
#[cfg(feature = "unstable")]
959-
upgrade_receiver: None,
960872
body: Body::empty(),
961873
ext: Extensions::new(),
962874
peer_addr: self.peer_addr.clone(),

src/response.rs

Lines changed: 101 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,42 @@ use crate::mime::Mime;
1717
use crate::trailers::{self, Trailers};
1818
use crate::{Body, Extensions, StatusCode, Version};
1919

20+
cfg_unstable! {
21+
use crate::upgrade;
22+
}
23+
24+
#[cfg(not(feature = "unstable"))]
25+
pin_project_lite::pin_project! {
26+
/// An HTTP response.
27+
///
28+
/// # Examples
29+
///
30+
/// ```
31+
/// # fn main() -> Result<(), http_types::Error> {
32+
/// #
33+
/// use http_types::{Response, StatusCode};
34+
///
35+
/// let mut res = Response::new(StatusCode::Ok);
36+
/// res.set_body("Hello, Nori!");
37+
/// #
38+
/// # Ok(()) }
39+
/// ```
40+
#[derive(Debug)]
41+
pub struct Response {
42+
status: StatusCode,
43+
headers: Headers,
44+
version: Option<Version>,
45+
trailers_sender: Option<sync::Sender<Trailers>>,
46+
trailers_receiver: Option<sync::Receiver<Trailers>>,
47+
#[pin]
48+
body: Body,
49+
ext: Extensions,
50+
local_addr: Option<String>,
51+
peer_addr: Option<String>,
52+
}
53+
}
54+
55+
#[cfg(feature = "unstable")]
2056
pin_project_lite::pin_project! {
2157
/// An HTTP response.
2258
///
@@ -37,8 +73,10 @@ pin_project_lite::pin_project! {
3773
status: StatusCode,
3874
headers: Headers,
3975
version: Option<Version>,
40-
sender: Option<sync::Sender<Trailers>>,
41-
receiver: Option<sync::Receiver<Trailers>>,
76+
trailers_sender: Option<sync::Sender<Trailers>>,
77+
trailers_receiver: Option<sync::Receiver<Trailers>>,
78+
upgrade_sender: Option<sync::Sender<upgrade::Connection>>,
79+
upgrade_receiver: Option<sync::Receiver<upgrade::Connection>>,
4280
#[pin]
4381
body: Body,
4482
ext: Extensions,
@@ -49,6 +87,7 @@ pin_project_lite::pin_project! {
4987

5088
impl Response {
5189
/// Create a new response.
90+
#[cfg(not(feature = "unstable"))]
5291
pub fn new<S>(status: S) -> Self
5392
where
5493
S: TryInto<StatusCode>,
@@ -57,14 +96,41 @@ impl Response {
5796
let status = status
5897
.try_into()
5998
.expect("Could not convert into a valid `StatusCode`");
60-
let (sender, receiver) = sync::channel(1);
99+
let (trailers_sender, trailers_receiver) = sync::channel(1);
61100
Self {
62101
status,
63102
headers: Headers::new(),
64103
version: None,
65104
body: Body::empty(),
66-
sender: Some(sender),
67-
receiver: Some(receiver),
105+
trailers_sender: Some(trailers_sender),
106+
trailers_receiver: Some(trailers_receiver),
107+
ext: Extensions::new(),
108+
peer_addr: None,
109+
local_addr: None,
110+
}
111+
}
112+
113+
/// Create a new response.
114+
#[cfg(feature = "unstable")]
115+
pub fn new<S>(status: S) -> Self
116+
where
117+
S: TryInto<StatusCode>,
118+
S::Error: Debug,
119+
{
120+
let status = status
121+
.try_into()
122+
.expect("Could not convert into a valid `StatusCode`");
123+
let (trailers_sender, trailers_receiver) = sync::channel(1);
124+
let (upgrade_sender, upgrade_receiver) = sync::channel(1);
125+
Self {
126+
status,
127+
headers: Headers::new(),
128+
version: None,
129+
body: Body::empty(),
130+
trailers_sender: Some(trailers_sender),
131+
trailers_receiver: Some(trailers_receiver),
132+
upgrade_sender: Some(upgrade_sender),
133+
upgrade_receiver: Some(upgrade_receiver),
68134
ext: Extensions::new(),
69135
peer_addr: None,
70136
local_addr: None,
@@ -457,7 +523,7 @@ impl Response {
457523
/// Sends trailers to the a receiver.
458524
pub fn send_trailers(&mut self) -> trailers::Sender {
459525
let sender = self
460-
.sender
526+
.trailers_sender
461527
.take()
462528
.expect("Trailers sender can only be constructed once");
463529
trailers::Sender::new(sender)
@@ -466,12 +532,34 @@ impl Response {
466532
/// Receive trailers from a sender.
467533
pub async fn recv_trailers(&mut self) -> trailers::Receiver {
468534
let receiver = self
469-
.receiver
535+
.trailers_receiver
470536
.take()
471537
.expect("Trailers receiver can only be constructed once");
472538
trailers::Receiver::new(receiver)
473539
}
474540

541+
/// Sends an upgrade connection to the a receiver.
542+
#[cfg(feature = "unstable")]
543+
#[cfg_attr(feature = "docs", doc(cfg(unstable)))]
544+
pub fn send_upgrade(&mut self) -> upgrade::Sender {
545+
let sender = self
546+
.upgrade_sender
547+
.take()
548+
.expect("Upgrade sender can only be constructed once");
549+
upgrade::Sender::new(sender)
550+
}
551+
552+
/// Receive an upgraded connection from a sender.
553+
#[cfg(feature = "unstable")]
554+
#[cfg_attr(feature = "docs", doc(cfg(unstable)))]
555+
pub async fn recv_upgrade(&mut self) -> upgrade::Receiver {
556+
let receiver = self
557+
.upgrade_receiver
558+
.take()
559+
.expect("Upgrade receiver can only be constructed once");
560+
upgrade::Receiver::new(receiver)
561+
}
562+
475563
/// An iterator visiting all header pairs in arbitrary order.
476564
pub fn iter(&self) -> headers::Iter<'_> {
477565
self.headers.iter()
@@ -526,8 +614,12 @@ impl Clone for Response {
526614
status: self.status.clone(),
527615
headers: self.headers.clone(),
528616
version: self.version.clone(),
529-
sender: self.sender.clone(),
530-
receiver: self.receiver.clone(),
617+
trailers_sender: self.trailers_sender.clone(),
618+
trailers_receiver: self.trailers_receiver.clone(),
619+
#[cfg(feature = "unstable")]
620+
upgrade_sender: self.upgrade_sender.clone(),
621+
#[cfg(feature = "unstable")]
622+
upgrade_receiver: self.upgrade_receiver.clone(),
531623
body: Body::empty(),
532624
ext: Extensions::new(),
533625
peer_addr: self.peer_addr.clone(),

0 commit comments

Comments
 (0)