pub struct Context { /* private fields */ }Expand description
Per-request context passed to every action.
Implementations§
Source§impl Context
impl Context
Sourcepub async fn build(req: Request) -> Self
pub async fn build(req: Request) -> Self
Central constructor used by the #[controller] macro. Splits the request,
captures matched path params, and retains the body for later reads.
pub fn from_request_parts(parts: Parts) -> Self
pub fn from_request(parts: Parts, body: Body) -> Self
Sourcepub fn db(&self) -> &'static DatabaseConnection
pub fn db(&self) -> &'static DatabaseConnection
The application’s database connection (global pool installed at boot).
Sourcepub fn param(&self, name: &str) -> Option<&str>
pub fn param(&self, name: &str) -> Option<&str>
A matched path parameter by name, e.g. ctx.param("id") for /posts/{id}.
Sourcepub async fn form<T: DeserializeOwned>(&mut self) -> Result<T>
pub async fn form<T: DeserializeOwned>(&mut self) -> Result<T>
Deserialize a URL-encoded (form) request body. Consumes the body.
Sourcepub async fn body_json<T: DeserializeOwned>(&mut self) -> Result<T>
pub async fn body_json<T: DeserializeOwned>(&mut self) -> Result<T>
Deserialize a JSON request body. Consumes the body.
Sourcepub fn params<T: DeserializeOwned>(&self) -> Result<T>
pub fn params<T: DeserializeOwned>(&self) -> Result<T>
Deserialize typed params from the request URI query string.
Sourcepub fn query_params(&self) -> Params
pub fn query_params(&self) -> Params
The query string as strong Params, for
require/permit allowlisting before use.
Sourcepub fn render(&self, template: &str, data: Value) -> Response
pub fn render(&self, template: &str, data: Value) -> Response
Render a Tera view to an HTML 200 response.
template is resolved by the global doido_view engine (installed at
boot) against app/views, with the .html.tera suffix added — e.g.
"posts/index" → app/views/posts/index.html.tera. A render failure (or
an uninitialised engine) yields a 500.
Sourcepub fn redirect_to(&self, location: impl AsRef<str>) -> Response
pub fn redirect_to(&self, location: impl AsRef<str>) -> Response
Return a 302 redirect.
Sourcepub fn status(&self, code: u16) -> Response
pub fn status(&self, code: u16) -> Response
Return a response with an explicit status code and empty body.
code must be a valid HTTP status code (100–999).
Sourcepub fn header(&self, name: &str) -> Option<&HeaderValue>
pub fn header(&self, name: &str) -> Option<&HeaderValue>
Get a request header by name (lowercase).
Sourcepub fn send_data(
&self,
data: Vec<u8>,
content_type: &str,
filename: Option<&str>,
) -> Response
pub fn send_data( &self, data: Vec<u8>, content_type: &str, filename: Option<&str>, ) -> Response
Send raw bytes as a response (Rails send_data). When filename is set,
a Content-Disposition: attachment header prompts a download.
Sourcepub async fn send_file(
&self,
path: impl AsRef<Path>,
content_type: Option<&str>,
) -> Result<Response>
pub async fn send_file( &self, path: impl AsRef<Path>, content_type: Option<&str>, ) -> Result<Response>
Send a file’s contents as a response (Rails send_file). content_type
defaults to application/octet-stream; the file name is used for the
download disposition.
Sourcepub fn negotiated_format(&self) -> Format
pub fn negotiated_format(&self) -> Format
The negotiated response Format: a .json or
.html path extension wins, otherwise the Accept header is inspected;
anything else is Any.
Sourcepub fn respond_to(&self) -> RespondTo
pub fn respond_to(&self) -> RespondTo
Begin format-based content negotiation (Rails respond_to).
Sourcepub fn etag_matches(&self, etag: &str) -> bool
pub fn etag_matches(&self, etag: &str) -> bool
Whether the request’s If-None-Match matches etag (or is *).
Sourcepub fn fresh_when(
&self,
etag: Option<&str>,
last_modified: Option<&str>,
) -> Option<Response>
pub fn fresh_when( &self, etag: Option<&str>, last_modified: Option<&str>, ) -> Option<Response>
HTTP conditional-GET check (Rails fresh_when): if the request’s
validators match etag (If-None-Match) or last_modified
(If-Modified-Since), return a 304 Not Modified echoing the validators;
otherwise return None and render normally (setting the same validators).
The plain/signed cookie jar (Rails cookies / cookies.signed). Reads
parse the request Cookie header; staged writes are flushed to
Set-Cookie after the action runs (see commit_to_response).
Sourcepub fn session(&mut self) -> &mut Session
pub fn session(&mut self) -> &mut Session
The encrypted session (Rails session). Loaded from the session cookie on
first access and re-encrypted into the response afterwards.
Sourcepub fn flash(&mut self) -> &mut Flash
pub fn flash(&mut self) -> &mut Flash
The flash (Rails flash): messages set on one request and read on the
next. Messages set this request are carried forward in a cookie; a flash
that is only read is swept so it lives exactly one following request.
Sourcepub fn commit_to_response(&self, response: &mut Response)
pub fn commit_to_response(&self, response: &mut Response)
Flush any session/flash/cookie changes into the response Set-Cookie
headers. Called by the #[controller] macro after the action; a no-op
when the action never touched session/flash/cookies.
Auto Trait Implementations§
impl !Freeze for Context
impl !RefUnwindSafe for Context
impl !Sync for Context
impl !UnwindSafe for Context
impl Send for Context
impl Unpin for Context
impl UnsafeUnpin for Context
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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>
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>
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