mirror of
https://github.com/n0-computer/noq.git
synced 2026-09-23 03:35:14 +00:00
H3: introduce builder pattern for client request
This commit is contained in:
@@ -289,7 +289,9 @@ fn client(
|
||||
HeaderValue::from_str("trailer").expect("trailer value"),
|
||||
);
|
||||
|
||||
conn.send_request_trailers(request, trailer)
|
||||
conn.request(request)
|
||||
.trailers(trailer)
|
||||
.send()
|
||||
.map_err(|e| format_err!("send request: {}", e))
|
||||
.and_then(|response| {
|
||||
println!("received response: {:?}", response);
|
||||
|
||||
+30
-14
@@ -85,21 +85,12 @@ impl Client {
|
||||
pub struct Connection(ConnectionRef);
|
||||
|
||||
impl Connection {
|
||||
pub fn send_request<T: Into<Body>>(&self, request: Request<T>) -> SendRequest {
|
||||
SendRequest::new(request, None, self.0.quic.open_bi(), self.0.clone())
|
||||
}
|
||||
|
||||
pub fn send_request_trailers<T: Into<Body>>(
|
||||
&self,
|
||||
request: Request<T>,
|
||||
trailers: HeaderMap,
|
||||
) -> SendRequest {
|
||||
SendRequest::new(
|
||||
pub fn request<T: Into<Body>>(&self, request: Request<T>) -> ReqBuilder<T> {
|
||||
ReqBuilder {
|
||||
request,
|
||||
Some(trailers),
|
||||
self.0.quic.open_bi(),
|
||||
self.0.clone(),
|
||||
)
|
||||
trailers: None,
|
||||
conn: self.0.clone(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,6 +120,31 @@ impl Future for Connecting {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct ReqBuilder<T> {
|
||||
conn: ConnectionRef,
|
||||
request: Request<T>,
|
||||
trailers: Option<HeaderMap>,
|
||||
}
|
||||
|
||||
impl<T> ReqBuilder<T>
|
||||
where
|
||||
T: Into<Body>,
|
||||
{
|
||||
pub fn trailers(mut self, trailers: HeaderMap) -> Self {
|
||||
self.trailers = Some(trailers);
|
||||
self
|
||||
}
|
||||
|
||||
pub fn send(self) -> SendRequest {
|
||||
SendRequest::new(
|
||||
self.request,
|
||||
self.trailers,
|
||||
self.conn.quic.open_bi(),
|
||||
self.conn,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
enum SendRequestState {
|
||||
Opening(OpenBi),
|
||||
Sending(SendHeaders),
|
||||
|
||||
Reference in New Issue
Block a user