Move axum-debug into axum-macros (#724)

* Move axum-debug into axum-macros

* fix ref to axum-macros in changelog

* Apply suggestions from code review

Co-authored-by: Jonas Platte <[email protected]>

Co-authored-by: Jonas Platte <[email protected]>
This commit is contained in:
David Pedersen
2022-02-22 13:33:10 +01:00
co-authored by Jonas Platte
parent 28832ad8b1
commit 3d2f4e4a35
57 changed files with 488 additions and 212 deletions
@@ -0,0 +1,10 @@
use axum_macros::FromRequest;
use axum::extract::Extension;
#[derive(FromRequest)]
struct Extractor(#[from_request(via(Extension), via(Extension))] State);
#[derive(Clone)]
struct State;
fn main() {}
@@ -0,0 +1,13 @@
error: `via` specified more than once
--> tests/from_request/fail/double_via_attr.rs:5:49
|
5 | struct Extractor(#[from_request(via(Extension), via(Extension))] State);
| ^^^
warning: unused import: `axum::extract::Extension`
--> tests/from_request/fail/double_via_attr.rs:2:5
|
2 | use axum::extract::Extension;
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
@@ -0,0 +1,6 @@
use axum_macros::FromRequest;
#[derive(FromRequest)]
struct Extractor<T>(Option<T>);
fn main() {}
@@ -0,0 +1,5 @@
error: `#[derive(FromRequest)] doesn't support generics
--> tests/from_request/fail/generic.rs:4:17
|
4 | struct Extractor<T>(Option<T>);
| ^^^
@@ -0,0 +1,6 @@
use axum_macros::FromRequest;
#[derive(FromRequest)]
struct Extractor(#[from_request(foo)] String);
fn main() {}
@@ -0,0 +1,5 @@
error: expected `via`
--> tests/from_request/fail/unknown_attr.rs:4:33
|
4 | struct Extractor(#[from_request(foo)] String);
| ^^^
@@ -0,0 +1,11 @@
use axum_macros::FromRequest;
use axum::extract::Extension;
#[derive(FromRequest)]
#[from_request(via(Extension))]
struct Extractor(#[from_request(via(Extension))] State);
#[derive(Clone)]
struct State;
fn main() {}
@@ -0,0 +1,13 @@
error: `#[from_request(via(...))]` on a field cannot be used together with `#[from_request(...)]` on the container
--> tests/from_request/fail/via_on_container_and_field.rs:6:33
|
6 | struct Extractor(#[from_request(via(Extension))] State);
| ^^^
warning: unused import: `axum::extract::Extension`
--> tests/from_request/fail/via_on_container_and_field.rs:2:5
|
2 | use axum::extract::Extension;
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
@@ -0,0 +1,22 @@
use axum::{
body::Body,
extract::{rejection::JsonRejection, FromRequest, Json},
};
use axum_macros::FromRequest;
use serde::Deserialize;
#[derive(Deserialize, FromRequest)]
#[from_request(via(Json))]
struct Extractor {
one: i32,
two: String,
three: bool,
}
fn assert_from_request()
where
Extractor: FromRequest<Body, Rejection = JsonRejection>,
{
}
fn main() {}
@@ -0,0 +1,51 @@
use axum::{
body::Body,
extract::{FromRequest, TypedHeader, rejection::{TypedHeaderRejection, StringRejection}},
headers::{self, UserAgent},
};
use axum_macros::FromRequest;
use std::convert::Infallible;
#[derive(FromRequest)]
struct Extractor {
uri: axum::http::Uri,
user_agent: TypedHeader<UserAgent>,
content_type: TypedHeader<headers::ContentType>,
etag: Option<TypedHeader<headers::ETag>>,
host: Result<TypedHeader<headers::Host>, TypedHeaderRejection>,
body: String,
}
fn assert_from_request()
where
Extractor: FromRequest<Body, Rejection = ExtractorRejection>,
{
}
fn assert_rejection(rejection: ExtractorRejection)
where
ExtractorRejection: std::fmt::Debug + std::fmt::Display + std::error::Error,
{
match rejection {
ExtractorRejection::Uri(inner) => {
let _: Infallible = inner;
}
ExtractorRejection::Body(inner) => {
let _: StringRejection = inner;
}
ExtractorRejection::UserAgent(inner) => {
let _: TypedHeaderRejection = inner;
}
ExtractorRejection::ContentType(inner) => {
let _: TypedHeaderRejection = inner;
}
ExtractorRejection::Etag(inner) => {
let _: Infallible = inner;
}
ExtractorRejection::Host(inner) => {
let _: Infallible = inner;
}
}
}
fn main() {}
@@ -0,0 +1,58 @@
use axum::{
body::Body,
extract::{
rejection::{ExtensionRejection, TypedHeaderRejection},
Extension, FromRequest, TypedHeader,
},
headers::{self, UserAgent},
};
use axum_macros::FromRequest;
use std::convert::Infallible;
#[derive(FromRequest)]
struct Extractor {
#[from_request(via(Extension))]
state: State,
#[from_request(via(TypedHeader))]
user_agent: UserAgent,
#[from_request(via(TypedHeader))]
content_type: headers::ContentType,
#[from_request(via(TypedHeader))]
etag: Option<headers::ETag>,
#[from_request(via(TypedHeader))]
host: Result<headers::Host, TypedHeaderRejection>,
}
fn assert_from_request()
where
Extractor: FromRequest<Body, Rejection = ExtractorRejection>,
{
}
fn assert_rejection(rejection: ExtractorRejection)
where
ExtractorRejection: std::fmt::Debug + std::fmt::Display + std::error::Error,
{
match rejection {
ExtractorRejection::State(inner) => {
let _: ExtensionRejection = inner;
}
ExtractorRejection::UserAgent(inner) => {
let _: TypedHeaderRejection = inner;
}
ExtractorRejection::ContentType(inner) => {
let _: TypedHeaderRejection = inner;
}
ExtractorRejection::Etag(inner) => {
let _: Infallible = inner;
}
ExtractorRejection::Host(inner) => {
let _: Infallible = inner;
}
}
}
#[derive(Clone)]
struct State;
fn main() {}
@@ -0,0 +1,12 @@
use axum_macros::FromRequest;
#[derive(FromRequest)]
struct Extractor(axum::http::HeaderMap, String);
fn assert_from_request()
where
Extractor: axum::extract::FromRequest<axum::body::Body>,
{
}
fn main() {}
@@ -0,0 +1,34 @@
use axum::extract::{Query, rejection::*};
use axum_macros::FromRequest;
use serde::Deserialize;
#[derive(FromRequest)]
struct Extractor(
Query<Payload>,
axum::extract::Json<Payload>,
);
#[derive(Deserialize)]
struct Payload {}
fn assert_from_request()
where
Extractor: axum::extract::FromRequest<axum::body::Body>,
{
}
fn assert_rejection(rejection: ExtractorRejection)
where
ExtractorRejection: std::fmt::Debug + std::fmt::Display + std::error::Error,
{
match rejection {
ExtractorRejection::QueryPayload(inner) => {
let _: QueryRejection = inner;
}
ExtractorRejection::JsonPayload(inner) => {
let _: JsonRejection = inner;
}
}
}
fn main() {}
@@ -0,0 +1,34 @@
use axum::extract::{Query, rejection::*};
use axum_macros::FromRequest;
use serde::Deserialize;
#[derive(FromRequest)]
struct Extractor(
#[from_request(via(Query))] Payload,
#[from_request(via(axum::extract::Json))] Payload,
);
fn assert_rejection(rejection: ExtractorRejection)
where
ExtractorRejection: std::fmt::Debug + std::fmt::Display + std::error::Error,
{
match rejection {
ExtractorRejection::QueryPayload(inner) => {
let _: QueryRejection = inner;
}
ExtractorRejection::JsonPayload(inner) => {
let _: JsonRejection = inner;
}
}
}
#[derive(Deserialize)]
struct Payload {}
fn assert_from_request()
where
Extractor: axum::extract::FromRequest<axum::body::Body>,
{
}
fn main() {}
@@ -0,0 +1,16 @@
use axum_macros::FromRequest;
use axum::extract::Extension;
#[derive(FromRequest)]
struct Extractor(#[from_request(via(Extension))] State);
#[derive(Clone)]
struct State;
fn assert_from_request()
where
Extractor: axum::extract::FromRequest<axum::body::Body>,
{
}
fn main() {}
@@ -0,0 +1,12 @@
use axum_macros::FromRequest;
#[derive(FromRequest)]
struct Extractor;
fn assert_from_request()
where
Extractor: axum::extract::FromRequest<axum::body::Body>,
{
}
fn main() {}