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:
David Pedersen
2022-05-08 20:04:56 +02:00
committed by GitHub
parent a3a32f493e
commit 852e548e19
14 changed files with 215 additions and 25 deletions
@@ -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 {}
| ^^^^^^^^^^^^^^^^^^