[−][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:
Forwarded
headerfor
key- The first
X-Forwarded-For
header - 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:
Forwarded
headerhost
key- The first
X-Forwarded-Host
header Host
header- 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<'_>
[src]
An iterator visiting all header pairs in arbitrary order.
#[must_use]pub fn iter_mut(&mut self) -> IterMut<'_>
[src]
An iterator visiting all header pairs in arbitrary order, with mutable references to the values.
#[must_use]pub fn header_names(&self) -> Names<'_>
[src]
An iterator visiting all header names in arbitrary order.
#[must_use]pub fn header_values(&self) -> Values<'_>
[src]
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> 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>,