Attribute Macro axum_debug_macros::debug_handler[][src]

#[debug_handler]
Expand description

Generates better error messages when applied to a handler function.

Examples

Function is not async:

#[debug_handler]
fn handler() -> &'static str {
    "Hello, world"
}
error: handlers must be async functions
  --> main.rs:xx:1
   |
xx | fn handler() -> &'static str {
   | ^^

Wrong return type:

#[debug_handler]
async fn handler() -> bool {
    false
}
error[E0277]: the trait bound `bool: IntoResponse` is not satisfied
  --> main.rs:xx:23
   |
xx | async fn handler() -> bool {
   |                       ^^^^
   |                       |
   |                       the trait `IntoResponse` is not implemented for `bool`

Wrong extractor:

#[debug_handler]
async fn handler(a: bool) -> String {
    format!("Can I extract a bool? {}", a)
}
error[E0277]: the trait bound `bool: FromRequest` is not satisfied
  --> main.rs:xx:21
   |
xx | async fn handler(a: bool) -> String {
   |                     ^^^^
   |                     |
   |                     the trait `FromRequest` is not implemented for `bool`

Too many extractors:

#[debug_handler]
async fn handler(
    a: String,
    b: String,
    c: String,
    d: String,
    e: String,
    f: String,
    g: String,
    h: String,
    i: String,
    j: String,
    k: String,
    l: String,
    m: String,
    n: String,
    o: String,
    p: String,
    q: String,
) {}
error: too many extractors. 16 extractors are allowed
note: you can nest extractors like "a: (Extractor, Extractor), b: (Extractor, Extractor)"
  --> main.rs:xx:5
   |
xx | /     a: String,
xx | |     b: String,
xx | |     c: String,
xx | |     d: String,
...  |
xx | |     p: String,
xx | |     q: String,
   | |______________^

Future is not Send:

#[debug_handler]
async fn handler() {
    let not_send = std::rc::Rc::new(());

    async{}.await;
}
error: future cannot be sent between threads safely
  --> main.rs:xx:10
   |
xx | async fn handler() {
   |          ^^^^^^^
   |          |
   |          future returned by `handler` is not `Send`