mirror of
https://github.com/tokio-rs/axum.git
synced 2026-08-19 00:00:14 +02:00
Improve debug_handler on tuple response types (#2201)
Co-authored-by: David Pedersen <[email protected]> Co-authored-by: Jonas Platte <[email protected]>
This commit is contained in:
co-authored by
David Pedersen
Jonas Platte
parent
85573e0573
commit
d2cea5cdbd
@@ -0,0 +1,29 @@
|
||||
use axum::response::AppendHeaders;
|
||||
|
||||
#[axum::debug_handler]
|
||||
async fn handler(
|
||||
) -> (
|
||||
axum::http::StatusCode,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
axum::http::StatusCode,
|
||||
) {
|
||||
panic!()
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,12 @@
|
||||
error: Cannot return tuples with more than 17 elements
|
||||
--> tests/debug_handler/fail/output_tuple_too_many.rs:5:3
|
||||
|
|
||||
5 | ) -> (
|
||||
| ___^
|
||||
6 | | axum::http::StatusCode,
|
||||
7 | | AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
8 | | AppendHeaders<[(axum::http::HeaderName, &'static str); 1]>,
|
||||
... |
|
||||
24 | | axum::http::StatusCode,
|
||||
25 | | ) {
|
||||
| |_^
|
||||
@@ -0,0 +1,10 @@
|
||||
#[axum::debug_handler]
|
||||
async fn handler(
|
||||
) -> (
|
||||
axum::http::request::Parts, // this should be response parts, not request parts
|
||||
axum::http::StatusCode,
|
||||
) {
|
||||
panic!()
|
||||
}
|
||||
|
||||
fn main(){}
|
||||
@@ -0,0 +1,8 @@
|
||||
error[E0308]: mismatched types
|
||||
--> tests/debug_handler/fail/returning_request_parts.rs:4:5
|
||||
|
|
||||
4 | axum::http::request::Parts, // this should be response parts, not request parts
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| expected `axum::http::response::Parts`, found `axum::http::request::Parts`
|
||||
| expected `axum::http::response::Parts` because of return type
|
||||
@@ -0,0 +1,10 @@
|
||||
#![allow(unused_parens)]
|
||||
|
||||
struct NotIntoResponse;
|
||||
|
||||
#[axum::debug_handler]
|
||||
async fn handler() -> (NotIntoResponse) {
|
||||
panic!()
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,21 @@
|
||||
error[E0277]: the trait bound `NotIntoResponse: IntoResponse` is not satisfied
|
||||
--> tests/debug_handler/fail/single_wrong_return_tuple.rs:6:23
|
||||
|
|
||||
6 | async fn handler() -> (NotIntoResponse) {
|
||||
| ^^^^^^^^^^^^^^^^^ the trait `IntoResponse` is not implemented for `NotIntoResponse`
|
||||
|
|
||||
= help: the following other types implement trait `IntoResponse`:
|
||||
Box<str>
|
||||
Box<[u8]>
|
||||
axum::body::Bytes
|
||||
Body
|
||||
axum::extract::rejection::FailedToBufferBody
|
||||
axum::extract::rejection::LengthLimitError
|
||||
axum::extract::rejection::UnknownBodyError
|
||||
bytes::bytes_mut::BytesMut
|
||||
and $N others
|
||||
note: required by a bound in `__axum_macros_check_handler_into_response::{closure#0}::check`
|
||||
--> tests/debug_handler/fail/single_wrong_return_tuple.rs:6:23
|
||||
|
|
||||
6 | async fn handler() -> (NotIntoResponse) {
|
||||
| ^^^^^^^^^^^^^^^^^ required by this bound in `check`
|
||||
@@ -0,0 +1,30 @@
|
||||
#![allow(unused_parens)]
|
||||
|
||||
#[axum::debug_handler]
|
||||
async fn named_type() -> (
|
||||
axum::http::StatusCode,
|
||||
axum::Json<&'static str>,
|
||||
axum::response::AppendHeaders<[( axum::http::HeaderName,&'static str); 1]>,
|
||||
) {
|
||||
panic!()
|
||||
}
|
||||
|
||||
|
||||
struct CustomIntoResponse{
|
||||
|
||||
}
|
||||
impl axum::response::IntoResponse for CustomIntoResponse{
|
||||
fn into_response(self) -> axum::response::Response {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
#[axum::debug_handler]
|
||||
async fn custom_type() -> (
|
||||
axum::http::StatusCode,
|
||||
CustomIntoResponse,
|
||||
axum::response::AppendHeaders<[( axum::http::HeaderName,&'static str); 1]>,
|
||||
) {
|
||||
panic!()
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,24 @@
|
||||
error: `Json<_>` must be the last element in a response tuple
|
||||
--> tests/debug_handler/fail/wrong_return_tuple.rs:6:5
|
||||
|
|
||||
6 | axum::Json<&'static str>,
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0277]: the trait bound `CustomIntoResponse: IntoResponseParts` is not satisfied
|
||||
--> tests/debug_handler/fail/wrong_return_tuple.rs:24:5
|
||||
|
|
||||
24 | CustomIntoResponse,
|
||||
| ^^^^^^^^^^^^^^^^^^ the trait `IntoResponseParts` is not implemented for `CustomIntoResponse`
|
||||
|
|
||||
= help: the following other types implement trait `IntoResponseParts`:
|
||||
AppendHeaders<I>
|
||||
HeaderMap
|
||||
Extension<T>
|
||||
Extensions
|
||||
Option<T>
|
||||
[(K, V); N]
|
||||
()
|
||||
(T1,)
|
||||
and $N others
|
||||
= help: see issue #48214
|
||||
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
|
||||
Reference in New Issue
Block a user