diff --git a/quinn-h3/examples/h3.rs b/quinn-h3/examples/h3.rs index 2c00579d6..234f08928 100644 --- a/quinn-h3/examples/h3.rs +++ b/quinn-h3/examples/h3.rs @@ -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); diff --git a/quinn-h3/src/client.rs b/quinn-h3/src/client.rs index 5d6b546d2..1ec265a5e 100644 --- a/quinn-h3/src/client.rs +++ b/quinn-h3/src/client.rs @@ -85,21 +85,12 @@ impl Client { pub struct Connection(ConnectionRef); impl Connection { - pub fn send_request>(&self, request: Request) -> SendRequest { - SendRequest::new(request, None, self.0.quic.open_bi(), self.0.clone()) - } - - pub fn send_request_trailers>( - &self, - request: Request, - trailers: HeaderMap, - ) -> SendRequest { - SendRequest::new( + pub fn request>(&self, request: Request) -> ReqBuilder { + 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 { + conn: ConnectionRef, + request: Request, + trailers: Option, +} + +impl ReqBuilder +where + T: Into, +{ + 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),