pub struct SendRequest<T, B>where
T: OpenStreams<B>,
B: Buf,{ /* private fields */ }Expand description
HTTP/3 request sender
send_request() initiates a new request and will resolve when it is ready to be sent
to the server. Then a RequestStream will be returned to send a request body (for
POST, PUT methods) and receive a response. After the whole body is sent, it is necessary
to call RequestStream::finish() to let the server know the request transfer is complete.
This includes the cases where no body is sent at all.
This struct is cloneable so multiple requests can be sent concurrently.
Existing instances are atomically counted internally, so whenever all of them have been
dropped, the connection will be automatically closed whith HTTP/3 connection error code
HTTP_NO_ERROR = 0.
§Examples
§Sending a request with no body
// Prepare the HTTP request to send to the server
let request = Request::get("https://www.example.com/").body(())?;
// Send the request to the server
let mut req_stream: RequestStream<_, _> = send_request.send_request(request).await?;
// Don't forget to end up the request by finishing the send stream.
req_stream.finish().await?;
// Receive the response
let response: Response<()> = req_stream.recv_response().await?;
// Process the response...§Sending a request with a body and trailers
// Prepare the HTTP request to send to the server
let request = Request::get("https://www.example.com/").body(())?;
// Send the request to the server
let mut req_stream = send_request.send_request(request).await?;
// Send some data
req_stream.send_data("body".into()).await?;
// Prepare the trailers
let mut trailers = HeaderMap::new();
trailers.insert("trailer", "value".parse()?);
// Send them and finish the send stream
req_stream.send_trailers(trailers).await?;
// We don't need to finish the send stream, as `send_trailers()` did it for us
// Receive the response.
let response = req_stream.recv_response().await?;
// Process the response...Implementations§
Source§impl<T, B> SendRequest<T, B>where
T: OpenStreams<B>,
B: Buf,
impl<T, B> SendRequest<T, B>where
T: OpenStreams<B>,
B: Buf,
Sourcepub async fn send_request(
&mut self,
req: Request<()>,
) -> Result<RequestStream<T::BidiStream, B>, Error>
pub async fn send_request( &mut self, req: Request<()>, ) -> Result<RequestStream<T::BidiStream, B>, Error>
Send a HTTP/3 request to the server
Trait Implementations§
Source§impl<T, B> Clone for SendRequest<T, B>
impl<T, B> Clone for SendRequest<T, B>
Source§impl<T, B> Drop for SendRequest<T, B>where
T: OpenStreams<B>,
B: Buf,
impl<T, B> Drop for SendRequest<T, B>where
T: OpenStreams<B>,
B: Buf,
Auto Trait Implementations§
impl<T, B> Freeze for SendRequest<T, B>where
T: Freeze,
impl<T, B> RefUnwindSafe for SendRequest<T, B>where
T: RefUnwindSafe,
impl<T, B> Send for SendRequest<T, B>where
T: Send,
impl<T, B> Sync for SendRequest<T, B>where
T: Sync,
impl<T, B> Unpin for SendRequest<T, B>where
T: Unpin,
impl<T, B> UnwindSafe for SendRequest<T, B>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more