axum_extra

Macro json

Source
macro_rules! json {
    ($($t:tt)*) => { ... };
}
Available on crate feature erased-json only.
Expand description

Construct an ErasedJson response from a JSON literal.

A Content-Type: application/json header is automatically added. Any variable or expression implementing Serialize can be interpolated as a value in the literal. If the Serialize implementation fails, or if a map with non-string keys is used, a 500 response will be issued whose body is the error message in UTF-8.

Internally, this function uses the typed_json::json! macro, allowing it to perform far fewer allocations than a dynamic macro like serde_json::json! would – it’s equivalent to if you had just written derive(Serialize) on a struct.

§Examples

use axum::{
    Router,
    extract::Path,
    response::Response,
    routing::get,
};
use axum_extra::response::ErasedJson;

async fn get_user(Path(user_id) : Path<u64>) -> ErasedJson {
    let user_name = find_user_name(user_id).await;
    axum_extra::json!({ "name": user_name })
}

async fn find_user_name(user_id: u64) -> String {
    // ...
}

let app = Router::new().route("/users/{id}", get(get_user));

Trailing commas are allowed in both arrays and objects.

let response = axum_extra::json!(["trailing",]);