Struct fastly::handle::RequestHandle

source ·
pub struct RequestHandle { /* private fields */ }
Expand description

The low-level interface to HTTP requests.

For most applications, you should use Request instead of this interface. See the top-level handle documentation for more details.

§Getting the client request

Call RequestHandle::from_client() to get the client request being handled by this execution of the Compute program.

§Creation and conversion

New requests can be created programmatically with RequestHandle::new(). In addition, you can convert to and from Request using Request::from_handles() and Request::into_handles().

§Sending backend requests

Requests can be sent to a backend in blocking or asynchronous fashion using send(), send_async(), or send_async_streaming().

Implementations§

source§

impl RequestHandle

source

pub const INVALID: Self = _

An invalid handle.

This is primarily useful to represent uninitialized values when using the interfaces in fastly_sys.

source

pub const fn is_valid(&self) -> bool

Returns true if the request handle is valid.

source

pub const fn is_invalid(&self) -> bool

Returns true if the request handle is invalid.

source

pub fn as_u32(&self) -> u32

Get the underlying representation of the handle.

This should only be used when calling the raw ABI directly, and care should be taken not to reuse or alias handle values.

source

pub fn as_u32_mut(&mut self) -> &mut u32

Get a mutable reference to the underlying u32 representation of the handle.

This should only be used when calling the raw ABI directly, and care should be taken not to reuse or alias handle values.

source

pub fn into_u32(self) -> u32

Turn a handle into its representation without closing the underlying resource.

This should only be used when calling the raw ABI directly, and care should be taken not to reuse or alias handle values.

source

pub fn from_client() -> Self

Get a handle to the client request being handled by this execution of the Compute program.

§Panics

This method panics if the client request has already been retrieved by this method, client_request_and_body(), or Request::from_client().

source

pub fn new() -> Self

Acquire a new request handle.

By default, the request will have a GET method, a URL of /, and empty headers.

source

pub fn get_header_names<'a>( &'a self, buf_size: usize ) -> impl Iterator<Item = Result<HeaderName, BufferSizeError>> + 'a

Read the request’s header names via a buffer of the provided size.

If there is a header name that is longer than buf_size, this will return a BufferSizeError; you can retry with a larger buffer size if necessary.

source

pub fn get_header_values<'a>( &'a self, name: &'a HeaderName, buf_size: usize ) -> impl Iterator<Item = Result<HeaderValue, BufferSizeError>> + 'a

Get the header values for the given name via a buffer of the provided size.

If there is a header value that is longer than the buffer, this will return a BufferSizeError; you can retry with a larger buffer size if necessary.

§Examples

Collect all the header values into a Vec:

let name = HeaderName::from_static("My-App-Header");
let buf_size = 128;
let header_values: Vec<HeaderValue> = request
    .get_header_values(&name, buf_size)
    .collect::<Result<Vec<HeaderValue>, _>>()?;

To try again with a larger buffer if the first call fails, you can use unwrap_or_else():

let name = HeaderName::from_static("My-App-Header");
let buf_size = 128;

// Collect header values into a `Vec<HeaderValue>`, with a buffer size of `128`.
// If the first call fails, print our error and then try to collect header values
// again. The second call will use a larger buffer size of `1024`.
let header_values: Vec<HeaderValue> = request
    .get_header_values(&name, buf_size)
    .collect::<Result<_, _>>()
    .unwrap_or_else(|err: BufferSizeError| {
        let larger_buf_size = 1024;
        request
            .get_header_values(&name, larger_buf_size)
            .collect::<Result<_, _>>()
            .unwrap()
    });
source

pub fn set_header_values<'a, I>(&mut self, name: &HeaderName, values: I)
where I: IntoIterator<Item = &'a HeaderValue>,

Set the values for the given header name, replacing any headers that previously existed for that name.

source

pub fn get_header_value( &self, name: &HeaderName, max_len: usize ) -> Result<Option<HeaderValue>, BufferSizeError>

Get the value of a header, or None if the header is not present.

If there are multiple values for the header, only one is returned. See get_header_values() if you need to get all of the values.

If the value is longer than max_len, this will return a BufferSizeError; you can retry with a larger buffer size if necessary.

source

pub fn insert_header(&mut self, name: &HeaderName, value: &HeaderValue)

Set a request header to the given value, discarding any previous values for the given header name.

source

pub fn append_header(&mut self, name: &HeaderName, value: &HeaderValue)

Add a request header with given value.

Unlike insert_header(), this does not discard existing values for the same header name.

source

pub fn remove_header(&mut self, name: &HeaderName) -> bool

Remove all request headers of the given name, and return whether any headers were removed.

source

pub fn get_version(&self) -> Version

Get the HTTP version of this request.

source

pub fn set_version(&mut self, v: Version)

Set the HTTP version of this request.

source

pub fn get_method(&self, max_length: usize) -> Result<Method, BufferSizeError>

Get the request method.

If the method is longer than max_length, this will return a BufferSizeError; you can retry with a larger buffer size if necessary.

source

pub fn set_method(&self, method: &Method)

Set the request method.

source

pub fn get_url(&self, max_length: usize) -> Result<Url, BufferSizeError>

Get the request URL.

If the URL is longer than max_length, this will return a BufferSizeError; you can retry with a larger buffer size if necessary.

source

pub fn set_url(&mut self, url: &Url)

Set the request URL.

source

pub fn send( self, body: BodyHandle, backend: &str ) -> Result<(ResponseHandle, BodyHandle), SendErrorCause>

Send the request to the given backend server, and return once the response headers have been received, or an error occurs.

source

pub fn send_async( self, body: BodyHandle, backend: &str ) -> Result<PendingRequestHandle, SendErrorCause>

Send a request asynchronously via the given backend, returning as soon as the request has begun sending.

The resulting PendingRequestHandle can be evaluated using PendingRequestHandle::poll(), PendingRequestHandle::wait(), or select_handles(). It can also be discarded if the request was sent for effects it might have, and the response is unimportant.

source

pub fn send_async_streaming( self, body: BodyHandle, backend: &str ) -> Result<(StreamingBodyHandle, PendingRequestHandle), SendErrorCause>

Send a request asynchronously via the given backend, and return a StreamingBodyHandle to allow continued writes to the request body.

StreamingBodyHandle::finish() must be called in order to finish sending the request.

source

pub fn set_cache_override(&mut self, cache_override: &CacheOverride)

Set the cache override behavior for this request.

This setting will override any cache directive headers returned in response to this request.

source

pub fn close(self) -> Result<(), HandleError>

Close the RequestHandle by removing it from the host Session. If the handle has already been closed an error will be returned. When calling send/send_async/send_async_streaming the RequestHandle is consumed and it’s cleaned up. You should only call close if you have not sent a request yet and want to clean up the resources if not being used.

§Examples
let request = RequestHandle::new();
// The handle is not being used so we can close it out without any
// trouble
request.close()?;
source

pub fn set_auto_decompress_response( &mut self, content_encodings: ContentEncodings )

Set the content encodings to automatically decompress responses to this request.

If the response to this request is encoded by one of the encodings set by this method, the response will be presented to the Compute program in decompressed form with the Content-Encoding and Content-Length headers removed.

source

pub fn set_framing_headers_mode(&mut self, mode: FramingHeadersMode)

Sets the way that framing headers are determined for this request.

source

pub fn handoff_websocket(&mut self, backend: &str) -> Result<(), SendErrorCause>

Pass the WebSocket directly to a backend.

This can only be used on services that have the WebSockets feature enabled and on requests that are valid WebSocket requests.

The sending completes in the background. Once this method has been called, no other response can be sent to this request, and the application can exit without affecting the send.

source

pub fn handoff_fanout(&mut self, backend: &str) -> Result<(), SendErrorCause>

Pass the request through the Fanout GRIP proxy and on to a backend.

This can only be used on services that have the Fanout feature enabled.

The sending completes in the background. Once this method has been called, no other response can be sent to this request, and the application can exit without affecting the send.

Trait Implementations§

source§

impl Debug for RequestHandle

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Drop for RequestHandle

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl Hash for RequestHandle

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq for RequestHandle

source§

fn eq(&self, other: &RequestHandle) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl RequestHandleCacheKey for RequestHandle

source§

fn set_cache_key(&mut self, key: &[u8; 32])

Set the cache key to be used when attempting to satisfy this request from a cached response.

§Stability

This is part of an experimental API that is subject to change or removal even in minor versions of this crate.

source§

impl RequestHandleUpgradeWebsocket for RequestHandle

source§

fn handoff_websocket(&mut self, backend: &str) -> Result<(), SendErrorCause>

👎Deprecated since 0.10.0: The RequestHandleUpgradeWebsocket::handoff_websocket() trait method is now part of RequestHandle.

Pass the WebSocket directly to a backend.

This can only be used on services that have the WebSockets feature enabled and on requests that are valid WebSocket requests.

The sending completes in the background. Once this method has been called, no other response can be sent to this request, and the application can exit without affecting the send.

source§

fn handoff_fanout(&mut self, backend: &str) -> Result<(), SendErrorCause>

👎Deprecated since 0.10.0: The RequestHandleUpgradeWebsocket::handoff_fanout() trait method is now part of RequestHandle.

Pass the request through the Fanout GRIP proxy and on to a backend.

This can only be used on services that have the Fanout feature enabled.

The sending completes in the background. Once this method has been called, no other response can be sent to this request, and the application can exit without affecting the send.

source§

impl Eq for RequestHandle

source§

impl StructuralPartialEq for RequestHandle

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.