mirror of
https://github.com/tokio-rs/axum.git
synced 2026-09-08 00:00:24 +02:00
Support #[derive(FromRequest)] on enums (#1009)
* Support `#[from_request(via(...))]` on enums * Check `#[from_request]` on variants * check for non enum/struct and clean up * changelog * changelog * remove needless feature * changelog ref
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
use axum_macros::FromRequest;
|
||||
|
||||
#[derive(FromRequest, Clone)]
|
||||
#[from_request(via(axum::Extension))]
|
||||
enum Extractor {
|
||||
Foo {
|
||||
#[from_request(via(axum::Extension))]
|
||||
foo: (),
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: `#[from_request(via(...))]` cannot be used inside variants
|
||||
--> tests/from_request/fail/enum_from_request_ident_in_variant.rs:7:24
|
||||
|
|
||||
7 | #[from_request(via(axum::Extension))]
|
||||
| ^^^
|
||||
@@ -0,0 +1,10 @@
|
||||
use axum_macros::FromRequest;
|
||||
|
||||
#[derive(FromRequest, Clone)]
|
||||
#[from_request(via(axum::Extension))]
|
||||
enum Extractor {
|
||||
#[from_request(via(axum::Extension))]
|
||||
Foo,
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: `#[from_request(via(...))]` cannot be used on variants
|
||||
--> tests/from_request/fail/enum_from_request_on_variant.rs:6:20
|
||||
|
|
||||
6 | #[from_request(via(axum::Extension))]
|
||||
| ^^^
|
||||
@@ -0,0 +1,6 @@
|
||||
use axum_macros::FromRequest;
|
||||
|
||||
#[derive(FromRequest, Clone)]
|
||||
enum Extractor {}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,7 @@
|
||||
error: missing `#[from_request(via(...))]`
|
||||
--> tests/from_request/fail/enum_no_via.rs:3:10
|
||||
|
|
||||
3 | #[derive(FromRequest, Clone)]
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= note: this error originates in the derive macro `FromRequest` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
@@ -0,0 +1,7 @@
|
||||
use axum_macros::FromRequest;
|
||||
|
||||
#[derive(FromRequest, Clone)]
|
||||
#[from_request(rejection_derive(!Error))]
|
||||
enum Extractor {}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,5 @@
|
||||
error: cannot use `rejection_derive` on enums
|
||||
--> tests/from_request/fail/enum_rejection_derive.rs:4:16
|
||||
|
|
||||
4 | #[from_request(rejection_derive(!Error))]
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
@@ -0,0 +1,6 @@
|
||||
use axum_macros::FromRequest;
|
||||
|
||||
#[derive(FromRequest)]
|
||||
union Extractor {}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,11 @@
|
||||
error: expected `struct` or `enum`
|
||||
--> tests/from_request/fail/not_enum_or_struct.rs:4:1
|
||||
|
|
||||
4 | union Extractor {}
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: unions cannot have zero fields
|
||||
--> tests/from_request/fail/not_enum_or_struct.rs:4:1
|
||||
|
|
||||
4 | union Extractor {}
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
Reference in New Issue
Block a user