mirror of
https://github.com/tokio-rs/axum.git
synced 2026-08-24 00:00:16 +02:00
Add type safe state extractor (#1155)
* begin threading the state through * Pass state to extractors * make state extractor work * make sure nesting with different states work * impl Service for MethodRouter<()> * Fix some of axum-macro's tests * Implement more traits for `State` * Update examples to use `State` * consistent naming of request body param * swap type params * Default the state param to () * fix docs references * Docs and handler state refactoring * docs clean ups * more consistent naming * when does MethodRouter implement Service? * add missing docs * use `Router`'s default state type param * changelog * don't use default type param for FromRequest and RequestParts probably safer for library authors so you don't accidentally forget * fix examples * minor docs tweaks * clarify how to convert handlers into services * group methods in one impl block * make sure merged `MethodRouter`s can access state * fix docs link * test merge with same state type * Document how to access state from middleware * Port cookie extractors to use state to extract keys (#1250) * Updates ECOSYSTEM with a new sample project (#1252) * Avoid unhelpful compiler suggestion (#1251) * fix docs typo * document how library authors should access state * Add `RequestParts::with_state` * fix example * apply suggestions from review * add relevant changes to axum-extra and axum-core changelogs * Add `route_service_with_tsr` * fix trybuild expectations * make sure `SpaRouter` works with routers that have state * Change order of type params on FromRequest and RequestParts * reverse order of `RequestParts::with_state` args to match type params * Add `FromRef` trait (#1268) * Add `FromRef` trait * Remove unnecessary type params * format * fix docs link * format examples * Avoid unnecessary `MethodRouter` * apply suggestions from review Co-authored-by: Dani Pardo <[email protected]> Co-authored-by: Jonas Platte <[email protected]>
This commit is contained in:
co-authored by
Dani Pardo
Jonas Platte
parent
90dbd52ee4
commit
423308de3c
@@ -1,17 +1,17 @@
|
||||
error[E0277]: the trait bound `bool: FromRequest<Body>` is not satisfied
|
||||
error[E0277]: the trait bound `bool: FromRequest<(), Body>` is not satisfied
|
||||
--> tests/debug_handler/fail/argument_not_extractor.rs:4:23
|
||||
|
|
||||
4 | async fn handler(foo: bool) {}
|
||||
| ^^^^ the trait `FromRequest<Body>` is not implemented for `bool`
|
||||
| ^^^^ the trait `FromRequest<(), Body>` is not implemented for `bool`
|
||||
|
|
||||
= help: the following other types implement trait `FromRequest<B>`:
|
||||
()
|
||||
(T1, T2)
|
||||
(T1, T2, T3)
|
||||
(T1, T2, T3, T4)
|
||||
(T1, T2, T3, T4, T5)
|
||||
(T1, T2, T3, T4, T5, T6)
|
||||
(T1, T2, T3, T4, T5, T6, T7)
|
||||
(T1, T2, T3, T4, T5, T6, T7, T8)
|
||||
and 33 others
|
||||
= help: the following other types implement trait `FromRequest<S, B>`:
|
||||
<() as FromRequest<S, B>>
|
||||
<(T1, T2) as FromRequest<S, B>>
|
||||
<(T1, T2, T3) as FromRequest<S, B>>
|
||||
<(T1, T2, T3, T4) as FromRequest<S, B>>
|
||||
<(T1, T2, T3, T4, T5) as FromRequest<S, B>>
|
||||
<(T1, T2, T3, T4, T5, T6) as FromRequest<S, B>>
|
||||
<(T1, T2, T3, T4, T5, T6, T7) as FromRequest<S, B>>
|
||||
<(T1, T2, T3, T4, T5, T6, T7, T8) as FromRequest<S, B>>
|
||||
and 34 others
|
||||
= help: see issue #48214
|
||||
|
||||
@@ -7,13 +7,14 @@ use axum_macros::debug_handler;
|
||||
struct A;
|
||||
|
||||
#[async_trait]
|
||||
impl<B> FromRequest<B> for A
|
||||
impl<S, B> FromRequest<S, B> for A
|
||||
where
|
||||
B: Send + 'static,
|
||||
B: Send,
|
||||
S: Send,
|
||||
{
|
||||
type Rejection = ();
|
||||
|
||||
async fn from_request(_req: &mut RequestParts<B>) -> Result<Self, Self::Rejection> {
|
||||
async fn from_request(_req: &mut RequestParts<S, B>) -> Result<Self, Self::Rejection> {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
error: Handlers must only take owned values
|
||||
--> tests/debug_handler/fail/extract_self_mut.rs:23:22
|
||||
--> tests/debug_handler/fail/extract_self_mut.rs:24:22
|
||||
|
|
||||
23 | async fn handler(&mut self) {}
|
||||
24 | async fn handler(&mut self) {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
@@ -7,13 +7,14 @@ use axum_macros::debug_handler;
|
||||
struct A;
|
||||
|
||||
#[async_trait]
|
||||
impl<B> FromRequest<B> for A
|
||||
impl<S, B> FromRequest<S, B> for A
|
||||
where
|
||||
B: Send + 'static,
|
||||
B: Send,
|
||||
S: Send,
|
||||
{
|
||||
type Rejection = ();
|
||||
|
||||
async fn from_request(_req: &mut RequestParts<B>) -> Result<Self, Self::Rejection> {
|
||||
async fn from_request(_req: &mut RequestParts<S, B>) -> Result<Self, Self::Rejection> {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
error: Handlers must only take owned values
|
||||
--> tests/debug_handler/fail/extract_self_ref.rs:23:22
|
||||
--> tests/debug_handler/fail/extract_self_ref.rs:24:22
|
||||
|
|
||||
23 | async fn handler(&self) {}
|
||||
24 | async fn handler(&self) {}
|
||||
| ^^^^^
|
||||
|
||||
@@ -120,13 +120,14 @@ impl A {
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl<B> FromRequest<B> for A
|
||||
impl<S, B> FromRequest<S, B> for A
|
||||
where
|
||||
B: Send + 'static,
|
||||
B: Send,
|
||||
S: Send,
|
||||
{
|
||||
type Rejection = ();
|
||||
|
||||
async fn from_request(_req: &mut RequestParts<B>) -> Result<Self, Self::Rejection> {
|
||||
async fn from_request(_req: &mut RequestParts<S, B>) -> Result<Self, Self::Rejection> {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,13 +7,14 @@ use axum_macros::debug_handler;
|
||||
struct A;
|
||||
|
||||
#[async_trait]
|
||||
impl<B> FromRequest<B> for A
|
||||
impl<S, B> FromRequest<S, B> for A
|
||||
where
|
||||
B: Send + 'static,
|
||||
B: Send,
|
||||
S: Send,
|
||||
{
|
||||
type Rejection = ();
|
||||
|
||||
async fn from_request(_req: &mut RequestParts<B>) -> Result<Self, Self::Rejection> {
|
||||
async fn from_request(_req: &mut RequestParts<S, B>) -> Result<Self, Self::Rejection> {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user