[−][src]Struct tide::Request
An HTTP request.
The Request gives endpoints access to basic information about the incoming
request, route parameters, and various ways of accessing the request's body.
Requests also provide extensions, a type map primarily used for low-level communication between middleware and endpoints.
Implementations
impl<State> Request<State>[src]
#[must_use]pub fn method(&self) -> Method[src]
Access the request's HTTP method.
Examples
use tide::Request; let mut app = tide::new(); app.at("/").get(|req: Request<()>| async move { assert_eq!(req.method(), http_types::Method::Get); Ok("") }); app.listen("127.0.0.1:8080").await?;
#[must_use]pub fn url(&self) -> &Url[src]
Access the request's full URI method.
Examples
use tide::Request; let mut app = tide::new(); app.at("/").get(|req: Request<()>| async move { assert_eq!(req.url(), &"/".parse::<tide::http::Url>().unwrap()); Ok("") }); app.listen("127.0.0.1:8080").await?;
#[must_use]pub fn version(&self) -> Option<Version>[src]
Access the request's HTTP version.
Examples
use tide::Request; let mut app = tide::new(); app.at("/").get(|req: Request<()>| async move { assert_eq!(req.version(), Some(http_types::Version::Http1_1)); Ok("") }); app.listen("127.0.0.1:8080").await?;
#[must_use]pub fn peer_addr(&self) -> Option<&str>[src]
Get the peer socket address for the underlying transport, if that information is available for this request.
#[must_use]pub fn local_addr(&self) -> Option<&str>[src]
Get the local socket address for the underlying transport, if that information is available for this request.
#[must_use]pub fn remote(&self) -> Option<&str>[src]
Get the remote address for this request.
This is determined in the following priority:
Forwardedheaderforkey- The first
X-Forwarded-Forheader - Peer address of the transport
#[must_use]pub fn host(&self) -> Option<&str>[src]
Get the destination host for this request.
This is determined in the following priority:
Forwardedheaderhostkey- The first
X-Forwarded-Hostheader Hostheader- URL domain, if any
#[must_use]pub fn content_type(&self) -> Option<Mime>[src]
#[must_use]pub fn header(&self, key: impl Into<HeaderName>) -> Option<&HeaderValues>[src]
Get an HTTP header.
Examples
use tide::Request; let mut app = tide::new(); app.at("/").get(|req: Request<()>| async move { assert_eq!(req.header("X-Forwarded-For").unwrap(), "127.0.0.1"); Ok("") }); app.listen("127.0.0.1:8080").await?;
pub fn header_mut(
&mut self,
name: impl Into<HeaderName>
) -> Option<&mut HeaderValues>[src]
&mut self,
name: impl Into<HeaderName>
) -> Option<&mut HeaderValues>
Get a mutable reference to a header.
pub fn insert_header(
&mut self,
name: impl Into<HeaderName>,
values: impl ToHeaderValues
) -> Option<HeaderValues>[src]
&mut self,
name: impl Into<HeaderName>,
values: impl ToHeaderValues
) -> Option<HeaderValues>
Set an HTTP header.
pub fn append_header(
&mut self,
name: impl Into<HeaderName>,
values: impl ToHeaderValues
)[src]
&mut self,
name: impl Into<HeaderName>,
values: impl ToHeaderValues
)
Append a header to the headers.
Unlike insert this function will not override the contents of a header, but insert a
header if there aren't any. Or else append to the existing list of headers.
pub fn remove_header(
&mut self,
name: impl Into<HeaderName>
) -> Option<HeaderValues>[src]
&mut self,
name: impl Into<HeaderName>
) -> Option<HeaderValues>
Remove a header.
#[must_use]pub fn iter(&self) -> Iter<'_>ⓘNotable traits for Iter<'a>
impl<'a> Iterator for Iter<'a> type Item = (&'a HeaderName, &'a HeaderValues);[src]
Notable traits for Iter<'a>
impl<'a> Iterator for Iter<'a> type Item = (&'a HeaderName, &'a HeaderValues);An iterator visiting all header pairs in arbitrary order.
#[must_use]pub fn iter_mut(&mut self) -> IterMut<'_>ⓘNotable traits for IterMut<'a>
impl<'a> Iterator for IterMut<'a> type Item = (&'a HeaderName, &'a mut HeaderValues);[src]
Notable traits for IterMut<'a>
impl<'a> Iterator for IterMut<'a> type Item = (&'a HeaderName, &'a mut HeaderValues);An iterator visiting all header pairs in arbitrary order, with mutable references to the values.
#[must_use]pub fn header_names(&self) -> Names<'_>ⓘNotable traits for Names<'a>
impl<'a> Iterator for Names<'a> type Item = &'a HeaderName;[src]
Notable traits for Names<'a>
impl<'a> Iterator for Names<'a> type Item = &'a HeaderName;An iterator visiting all header names in arbitrary order.
#[must_use]pub fn header_values(&self) -> Values<'_>ⓘNotable traits for Values<'a>
impl<'a> Iterator for Values<'a> type Item = &'a HeaderValue;[src]
Notable traits for Values<'a>
impl<'a> Iterator for Values<'a> type Item = &'a HeaderValue;An iterator visiting all header values in arbitrary order.
#[must_use]pub fn ext<T: Send + Sync + 'static>(&self) -> Option<&T>[src]
Get a request extension value.
#[must_use]pub fn ext_mut<T: Send + Sync + 'static>(&mut self) -> Option<&mut T>[src]
Get a mutable reference to value stored in request extensions.
pub fn set_ext<T: Send + Sync + 'static>(&mut self, val: T) -> Option<T>[src]
Set a request extension value.
#[must_use]pub fn state(&self) -> &State[src]
Access application scoped state.
pub fn param(&self, key: &str) -> Result<&str>[src]
Extract and parse a route parameter by name.
Returns the parameter as a &str, borrowed from this Request.
The name should not include the leading : or the trailing * (if
any).
Errors
An error is returned if key is not a valid parameter for the route.
Examples
use tide::{Request, Result}; async fn greet(req: Request<()>) -> Result<String> { let name = req.param("name").unwrap_or("world"); Ok(format!("Hello, {}!", name)) } let mut app = tide::new(); app.at("/hello").get(greet); app.at("/hello/:name").get(greet); app.listen("127.0.0.1:8080").await?;
pub fn query<T: DeserializeOwned>(&self) -> Result<T>[src]
Parse the URL query component into a struct, using serde_qs. To
get the entire query as an unparsed string, use request.url().query()
use tide::prelude::*; let mut app = tide::new(); #[derive(Deserialize)] #[serde(default)] struct Page { size: u8, offset: u8, } impl Default for Page { fn default() -> Self { Self { size: 25, offset: 0, } } } app.at("/pages").post(|req: tide::Request<()>| async move { let page: Page = req.query()?; Ok(format!("page {}, with {} items", page.offset, page.size)) }); app.listen("localhost:8000").await?; // $ curl localhost:8000/pages // page 0, with 25 items // $ curl localhost:8000/pages?offset=1 // page 1, with 25 items // $ curl localhost:8000/pages?offset=2&size=50 // page 2, with 50 items // $ curl localhost:8000/pages?size=5000 // failed with reason: number too large to fit in target type // $ curl localhost:8000/pages?size=all // failed with reason: invalid digit found in string
pub fn set_body(&mut self, body: impl Into<Body>)[src]
Set the body reader.
pub fn take_body(&mut self) -> Body[src]
Take the request body as a Body.
This method can be called after the body has already been taken or read,
but will return an empty Body.
This is useful for consuming the body via an AsyncReader or AsyncBufReader.
pub async fn body_bytes(&mut self) -> Result<Vec<u8>>[src]
Reads the entire request body into a byte buffer.
This method can be called after the body has already been read, but will produce an empty buffer.
Errors
Any I/O error encountered while reading the body is immediately returned
as an Err.
Examples
use tide::Request; let mut app = tide::new(); app.at("/").get(|mut req: Request<()>| async move { let _body: Vec<u8> = req.body_bytes().await.unwrap(); Ok("") }); app.listen("127.0.0.1:8080").await?;
pub async fn body_string(&mut self) -> Result<String>[src]
Reads the entire request body into a string.
This method can be called after the body has already been read, but will produce an empty buffer.
Errors
Any I/O error encountered while reading the body is immediately returned
as an Err.
If the body cannot be interpreted as valid UTF-8, an Err is returned.
Examples
use tide::Request; let mut app = tide::new(); app.at("/").get(|mut req: Request<()>| async move { let _body: String = req.body_string().await.unwrap(); Ok("") }); app.listen("127.0.0.1:8080").await?;
pub async fn body_json<T: DeserializeOwned>(&mut self) -> Result<T>[src]
Reads and deserialized the entire request body via json.
Errors
Any I/O error encountered while reading the body is immediately returned
as an Err.
If the body cannot be interpreted as valid json for the target type T,
an Err is returned.
pub async fn body_form<T: DeserializeOwned>(&mut self) -> Result<T>[src]
Parse the request body as a form.
use tide::prelude::*; let mut app = tide::new(); #[derive(Deserialize)] struct Animal { name: String, legs: u8 } app.at("/").post(|mut req: tide::Request<()>| async move { let animal: Animal = req.body_form().await?; Ok(format!( "hello, {}! i've put in an order for {} shoes", animal.name, animal.legs )) }); app.listen("localhost:8000").await?; // $ curl localhost:8000/orders/shoes -d "name=chashu&legs=4" // hello, chashu! i've put in an order for 4 shoes // $ curl localhost:8000/orders/shoes -d "name=mary%20millipede&legs=750" // number too large to fit in target type
#[must_use]pub fn cookie(&self, name: &str) -> Option<Cookie<'static>>[src]
returns a Cookie by name of the cookie.
pub fn session(&self) -> &Session[src]
Retrieves a reference to the current session.
Panics
This method will panic if a tide::sessions:SessionMiddleware has not been run.
pub fn session_mut(&mut self) -> &mut Session[src]
Retrieves a mutable reference to the current session.
Panics
This method will panic if a tide::sessions:SessionMiddleware has not been run.
#[must_use]pub fn len(&self) -> Option<usize>[src]
Get the length of the body stream, if it has been set.
This value is set when passing a fixed-size object into as the body. E.g. a string, or a
buffer. Consumers of this API should check this value to decide whether to use Chunked
encoding, or set the response length.
#[must_use]pub fn is_empty(&self) -> Option<bool>[src]
Returns true if the request has a set body stream length of zero, false otherwise.
Trait Implementations
impl<State> AsMut<Headers> for Request<State>[src]
impl<State> AsMut<Request> for Request<State>[src]
impl<State> AsRef<Headers> for Request<State>[src]
impl<State> AsRef<Request> for Request<State>[src]
impl<State> AsyncRead for Request<State>[src]
fn poll_read(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &mut [u8]
) -> Poll<Result<usize>>[src]
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &mut [u8]
) -> Poll<Result<usize>>
pub fn poll_read_vectored(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
bufs: &mut [IoSliceMut<'_>]
) -> Poll<Result<usize, Error>>
self: Pin<&mut Self>,
cx: &mut Context<'_>,
bufs: &mut [IoSliceMut<'_>]
) -> Poll<Result<usize, Error>>
impl<State: Debug> Debug for Request<State>[src]
impl<State> Index<&'_ str> for Request<State>[src]
type Output = HeaderValues
The returned type after indexing.
fn index(&self, name: &str) -> &HeaderValues[src]
Returns a reference to the value corresponding to the supplied name.
Panics
Panics if the name is not present in Request.
impl<State> Index<HeaderName> for Request<State>[src]
type Output = HeaderValues
The returned type after indexing.
fn index(&self, name: HeaderName) -> &HeaderValues[src]
Returns a reference to the value corresponding to the supplied name.
Panics
Panics if the name is not present in Request.
impl<State: Default> Into<Request<State>> for Request[src]
impl<State> Into<Request> for Request<State>[src]
impl<State: Clone + Send + Sync + 'static> Into<Response> for Request<State>[src]
impl<State> IntoIterator for Request<State>[src]
type Item = (HeaderName, HeaderValues)
The type of the elements being iterated over.
type IntoIter = IntoIter
Which kind of iterator are we turning this into?
fn into_iter(self) -> Self::IntoIter[src]
Returns a iterator of references over the remaining items.
impl<'a, State> IntoIterator for &'a Request<State>[src]
type Item = (&'a HeaderName, &'a HeaderValues)
The type of the elements being iterated over.
type IntoIter = Iter<'a>
Which kind of iterator are we turning this into?
fn into_iter(self) -> Self::IntoIter[src]
impl<'a, State> IntoIterator for &'a mut Request<State>[src]
type Item = (&'a HeaderName, &'a mut HeaderValues)
The type of the elements being iterated over.
type IntoIter = IterMut<'a>
Which kind of iterator are we turning this into?
fn into_iter(self) -> Self::IntoIter[src]
impl<'__pin, State> Unpin for Request<State> where
__Origin<'__pin, State>: Unpin, [src]
__Origin<'__pin, State>: Unpin,
Auto Trait Implementations
impl<State> !RefUnwindSafe for Request<State>[src]
impl<State> Send for Request<State> where
State: Send, [src]
State: Send,
impl<State> Sync for Request<State> where
State: Sync, [src]
State: Sync,
impl<State> !UnwindSafe for Request<State>[src]
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<R> AsyncReadExt for R where
R: AsyncRead + ?Sized,
R: AsyncRead + ?Sized,
pub fn read(&'a mut self, buf: &'a mut [u8]) -> ReadFuture<'a, Self> where
Self: Unpin,
Self: Unpin,
pub fn read_vectored(
&'a mut self,
bufs: &'a mut [IoSliceMut<'a>]
) -> ReadVectoredFuture<'a, Self> where
Self: Unpin,
&'a mut self,
bufs: &'a mut [IoSliceMut<'a>]
) -> ReadVectoredFuture<'a, Self> where
Self: Unpin,
pub fn read_to_end(
&'a mut self,
buf: &'a mut Vec<u8, Global>
) -> ReadToEndFuture<'a, Self> where
Self: Unpin,
&'a mut self,
buf: &'a mut Vec<u8, Global>
) -> ReadToEndFuture<'a, Self> where
Self: Unpin,
pub fn read_to_string(
&'a mut self,
buf: &'a mut String
) -> ReadToStringFuture<'a, Self> where
Self: Unpin,
&'a mut self,
buf: &'a mut String
) -> ReadToStringFuture<'a, Self> where
Self: Unpin,
pub fn read_exact(&'a mut self, buf: &'a mut [u8]) -> ReadExactFuture<'a, Self> where
Self: Unpin,
Self: Unpin,
pub fn take(self, limit: u64) -> Take<Self>
pub fn bytes(self) -> Bytes<Self>
pub fn chain<R>(self, next: R) -> Chain<Self, R> where
R: AsyncRead,
R: AsyncRead,
pub fn boxed_reader<'a>(self) -> Pin<Box<dyn AsyncRead + 'a + Send, Global>> where
Self: Send + 'a,
Self: Send + 'a,
impl<R> AsyncReadExt for R where
R: AsyncRead + ?Sized, [src]
R: AsyncRead + ?Sized,
pub fn chain<R>(self, next: R) -> Chain<Self, R> where
R: AsyncRead, [src]
R: AsyncRead,
pub fn read(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self> where
Self: Unpin, [src]
Self: Unpin,
pub fn read_vectored(
&'a mut self,
bufs: &'a mut [IoSliceMut<'a>]
) -> ReadVectored<'a, Self> where
Self: Unpin, [src]
&'a mut self,
bufs: &'a mut [IoSliceMut<'a>]
) -> ReadVectored<'a, Self> where
Self: Unpin,
pub fn read_exact(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self> where
Self: Unpin, [src]
Self: Unpin,
pub fn read_to_end(
&'a mut self,
buf: &'a mut Vec<u8, Global>
) -> ReadToEnd<'a, Self> where
Self: Unpin, [src]
&'a mut self,
buf: &'a mut Vec<u8, Global>
) -> ReadToEnd<'a, Self> where
Self: Unpin,
pub fn read_to_string(
&'a mut self,
buf: &'a mut String
) -> ReadToString<'a, Self> where
Self: Unpin, [src]
&'a mut self,
buf: &'a mut String
) -> ReadToString<'a, Self> where
Self: Unpin,
pub fn split(self) -> (ReadHalf<Self>, WriteHalf<Self>) where
Self: AsyncWrite, [src]
Self: AsyncWrite,
pub fn take(self, limit: u64) -> Take<Self>[src]
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T> ReadExt for T where
T: AsyncRead + ?Sized, [src]
T: AsyncRead + ?Sized,
pub fn read(&'a mut self, buf: &'a mut [u8]) -> ReadFuture<'a, Self> where
Self: Unpin, [src]
Self: Unpin,
pub fn read_vectored(
&'a mut self,
bufs: &'a mut [IoSliceMut<'a>]
) -> ReadVectoredFuture<'a, Self> where
Self: Unpin, [src]
&'a mut self,
bufs: &'a mut [IoSliceMut<'a>]
) -> ReadVectoredFuture<'a, Self> where
Self: Unpin,
pub fn read_to_end(
&'a mut self,
buf: &'a mut Vec<u8, Global>
) -> ReadToEndFuture<'a, Self> where
Self: Unpin, [src]
&'a mut self,
buf: &'a mut Vec<u8, Global>
) -> ReadToEndFuture<'a, Self> where
Self: Unpin,
pub fn read_to_string(
&'a mut self,
buf: &'a mut String
) -> ReadToStringFuture<'a, Self> where
Self: Unpin, [src]
&'a mut self,
buf: &'a mut String
) -> ReadToStringFuture<'a, Self> where
Self: Unpin,
pub fn read_exact(&'a mut self, buf: &'a mut [u8]) -> ReadExactFuture<'a, Self> where
Self: Unpin, [src]
Self: Unpin,
pub fn take(self, limit: u64) -> Take<Self>[src]
pub fn by_ref(&mut self) -> &mut Self[src]
pub fn bytes(self) -> Bytes<Self>[src]
pub fn chain<R>(self, next: R) -> Chain<Self, R> where
R: AsyncRead, [src]
R: AsyncRead,
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,