pub struct SendRequest<T, B>where
T: OpenStreams<B>,
B: Buf,{ /* private fields */ }Available on crate feature
h3 only.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 with 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 as OpenStreams<B>>::BidiStream, B>, StreamError>
pub async fn send_request( &mut self, req: Request<()>, ) -> Result<RequestStream<<T as OpenStreams<B>>::BidiStream, B>, StreamError>
Send an 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§fn clone(&self) -> SendRequest<T, B>
fn clone(&self) -> SendRequest<T, B>
Returns a duplicate of the value. Read more
1.0.0 · Source§const fn clone_from(&mut self, source: &Self)
const fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<T, B> CloseStream for SendRequest<T, B>where
T: OpenStreams<B>,
B: Buf,
impl<T, B> CloseStream for SendRequest<T, B>where
T: OpenStreams<B>,
B: Buf,
Source§fn handle_connection_error_on_stream(
&mut self,
internal_error: InternalConnectionError,
) -> StreamError
fn handle_connection_error_on_stream( &mut self, internal_error: InternalConnectionError, ) -> StreamError
Handles a connection error on a stream
Source§fn handle_quic_stream_error(&self, error: StreamErrorIncoming) -> StreamError
fn handle_quic_stream_error(&self, error: StreamErrorIncoming) -> StreamError
Handles a incoming stream error from the quic layer
Source§fn check_peer_connection_closing(&self) -> Option<StreamError>
fn check_peer_connection_closing(&self) -> Option<StreamError>
Checks if the peer connection is closing an if it is allowed to send a request / server push
Source§impl<T, B> ConnectionState for SendRequest<T, B>where
T: OpenStreams<B>,
B: Buf,
impl<T, B> ConnectionState for SendRequest<T, B>where
T: OpenStreams<B>,
B: Buf,
Get the shared state
Source§fn get_conn_error(&self) -> Option<ErrorOrigin>
fn get_conn_error(&self) -> Option<ErrorOrigin>
Get the connection error if the connection is in error state because of another task Read more
Source§fn set_conn_error(&self, error: ErrorOrigin) -> ErrorOrigin
fn set_conn_error(&self, error: ErrorOrigin) -> ErrorOrigin
tries to set the connection error
Source§fn set_conn_error_and_wake<T>(&self, error: T) -> ErrorOriginwhere
T: Into<ErrorOrigin>,
fn set_conn_error_and_wake<T>(&self, error: T) -> ErrorOriginwhere
T: Into<ErrorOrigin>,
set the connection error and wake the connection
Source§fn set_closing(&self)
fn set_closing(&self)
Set the connection to closing
Source§fn is_closing(&self) -> bool
fn is_closing(&self) -> bool
Check if the connection is closing
Source§fn set_settings(&self, settings: Settings)
fn set_settings(&self, settings: Settings)
Set the settings
Source§fn waker(&self) -> &AtomicWaker
fn waker(&self) -> &AtomicWaker
Returns the waker for the connection
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>
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>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more