pub struct Request {
pub method: Method,
pub uri: Uri,
pub version: Version,
pub headers: HeaderMap,
pub extensions: Extensions,
pub body: Body,
}
Expand description
Represents an HTTP request.
An HTTP request consists of a head and a optional body.
Examples
Creating a Request
to send
use axol_http::{Request, Response};
let mut request = Request::builder()
.uri("https://www.rust-lang.org/")
.header("User-Agent", "my-awesome-agent/1.0");
if needs_awesome_header() {
request = request.header("Awesome", "yes");
}
let response = send(request.body(()).unwrap());
fn send(req: Request<()>) -> Response<()> {
// ...
}
Inspecting a request to see what was sent.
use axol_http::{Request, Response, StatusCode};
fn respond_to(req: Request<()>) -> axol_http::Result<Response<()>> {
if req.uri() != "/awesome-url" {
return Response::builder()
.status(StatusCode::NOT_FOUND)
.body(())
}
let has_awesome_header = req.headers().contains_key("Awesome");
let body = req.body();
// ...
}
Deserialize a request of bytes via json:
use axol_http::Request;
use serde::de;
fn deserialize<T>(req: Request<Vec<u8>>) -> serde_json::Result<Request<T>>
where for<'de> T: de::Deserialize<'de>,
{
let (parts, body) = req.into_parts();
let body = serde_json::from_slice(&body)?;
Ok(Request::from_parts(parts, body))
}
Or alternatively, serialize the body of a request to json
use axol_http::Request;
use serde::ser;
fn serialize<T>(req: Request<T>) -> serde_json::Result<Request<Vec<u8>>>
where T: ser::Serialize,
{
let (parts, body) = req.into_parts();
let body = serde_json::to_vec(&body)?;
Ok(Request::from_parts(parts, body))
}
Fields§
§method: Method
The request’s method
uri: Uri
The request’s URI
version: Version
The request’s version
headers: HeaderMap
The request’s headers. All headers are always lowercased.
extensions: Extensions
The request’s extensions
body: Body
The request’s body
Implementations§
source§impl Request
impl Request
pub fn parts(&mut self) -> RequestPartsRef<'_>
sourcepub fn builder() -> Builder
pub fn builder() -> Builder
Creates a new builder-style object to manufacture a Request
This method returns an instance of Builder
which can be used to
create a Request
.
Examples
let request = Request::builder()
.method("GET")
.uri("https://www.rust-lang.org/")
.header("X-Custom-Foo", "Bar")
.body(())
.unwrap();
sourcepub fn get<T>(uri: T) -> Builderwhere
Uri: TryFrom<T>,
<Uri as TryFrom<T>>::Error: Into<HttpError>,
pub fn get<T>(uri: T) -> Builderwhere Uri: TryFrom<T>, <Uri as TryFrom<T>>::Error: Into<HttpError>,
Creates a new Builder
initialized with a GET method and the given URI.
This method returns an instance of Builder
which can be used to
create a Request
.
Example
let request = Request::get("https://www.rust-lang.org/")
.body(())
.unwrap();
sourcepub fn put<T>(uri: T) -> Builderwhere
Uri: TryFrom<T>,
<Uri as TryFrom<T>>::Error: Into<HttpError>,
pub fn put<T>(uri: T) -> Builderwhere Uri: TryFrom<T>, <Uri as TryFrom<T>>::Error: Into<HttpError>,
Creates a new Builder
initialized with a PUT method and the given URI.
This method returns an instance of Builder
which can be used to
create a Request
.
Example
let request = Request::put("https://www.rust-lang.org/")
.body(())
.unwrap();
sourcepub fn post<T>(uri: T) -> Builderwhere
Uri: TryFrom<T>,
<Uri as TryFrom<T>>::Error: Into<HttpError>,
pub fn post<T>(uri: T) -> Builderwhere Uri: TryFrom<T>, <Uri as TryFrom<T>>::Error: Into<HttpError>,
Creates a new Builder
initialized with a POST method and the given URI.
This method returns an instance of Builder
which can be used to
create a Request
.
Example
let request = Request::post("https://www.rust-lang.org/")
.body(())
.unwrap();
sourcepub fn delete<T>(uri: T) -> Builderwhere
Uri: TryFrom<T>,
<Uri as TryFrom<T>>::Error: Into<HttpError>,
pub fn delete<T>(uri: T) -> Builderwhere Uri: TryFrom<T>, <Uri as TryFrom<T>>::Error: Into<HttpError>,
Creates a new Builder
initialized with a DELETE method and the given URI.
This method returns an instance of Builder
which can be used to
create a Request
.
Example
let request = Request::delete("https://www.rust-lang.org/")
.body(())
.unwrap();
sourcepub fn options<T>(uri: T) -> Builderwhere
Uri: TryFrom<T>,
<Uri as TryFrom<T>>::Error: Into<HttpError>,
pub fn options<T>(uri: T) -> Builderwhere Uri: TryFrom<T>, <Uri as TryFrom<T>>::Error: Into<HttpError>,
Creates a new Builder
initialized with an OPTIONS method and the given URI.
This method returns an instance of Builder
which can be used to
create a Request
.
Example
let request = Request::options("https://www.rust-lang.org/")
.body(())
.unwrap();
sourcepub fn head<T>(uri: T) -> Builderwhere
Uri: TryFrom<T>,
<Uri as TryFrom<T>>::Error: Into<HttpError>,
pub fn head<T>(uri: T) -> Builderwhere Uri: TryFrom<T>, <Uri as TryFrom<T>>::Error: Into<HttpError>,
Creates a new Builder
initialized with a HEAD method and the given URI.
This method returns an instance of Builder
which can be used to
create a Request
.
Example
let request = Request::head("https://www.rust-lang.org/")
.body(())
.unwrap();
sourcepub fn connect<T>(uri: T) -> Builderwhere
Uri: TryFrom<T>,
<Uri as TryFrom<T>>::Error: Into<HttpError>,
pub fn connect<T>(uri: T) -> Builderwhere Uri: TryFrom<T>, <Uri as TryFrom<T>>::Error: Into<HttpError>,
Creates a new Builder
initialized with a CONNECT method and the given URI.
This method returns an instance of Builder
which can be used to
create a Request
.
Example
let request = Request::connect("https://www.rust-lang.org/")
.body(())
.unwrap();
sourcepub fn patch<T>(uri: T) -> Builderwhere
Uri: TryFrom<T>,
<Uri as TryFrom<T>>::Error: Into<HttpError>,
pub fn patch<T>(uri: T) -> Builderwhere Uri: TryFrom<T>, <Uri as TryFrom<T>>::Error: Into<HttpError>,
Creates a new Builder
initialized with a PATCH method and the given URI.
This method returns an instance of Builder
which can be used to
create a Request
.
Example
let request = Request::patch("https://www.rust-lang.org/")
.body(())
.unwrap();
sourcepub fn trace<T>(uri: T) -> Builderwhere
Uri: TryFrom<T>,
<Uri as TryFrom<T>>::Error: Into<HttpError>,
pub fn trace<T>(uri: T) -> Builderwhere Uri: TryFrom<T>, <Uri as TryFrom<T>>::Error: Into<HttpError>,
Creates a new Builder
initialized with a TRACE method and the given URI.
This method returns an instance of Builder
which can be used to
create a Request
.
Example
let request = Request::trace("https://www.rust-lang.org/")
.body(())
.unwrap();
sourcepub fn new(body: impl Into<Body>) -> Request
pub fn new(body: impl Into<Body>) -> Request
Creates a new blank Request
with the body
The component parts of this request will be set to their default, e.g. the GET method, no headers, etc.
Examples
let request = Request::new("hello world");
assert_eq!(*request.method(), Method::GET);
assert_eq!(*request.body(), "hello world");
sourcepub fn from_parts(parts: RequestParts, body: impl Into<Body>) -> Request
pub fn from_parts(parts: RequestParts, body: impl Into<Body>) -> Request
Creates a new Request
with the given components parts and body.
Examples
let request = Request::new("hello world");
let (mut parts, body) = request.into_parts();
parts.method = Method::POST;
let request = Request::from_parts(parts, body);
sourcepub fn into_parts(self) -> (RequestParts, Body)
pub fn into_parts(self) -> (RequestParts, Body)
Consumes the request returning the head and body parts.
Examples
let request = Request::new(());
let (parts, body) = request.into_parts();
assert_eq!(parts.method, Method::GET);