Salvo handlers can automatically deserialize request bodies and return typed JSON responses using serde.
To use this pattern, ensure you have serde with the derive feature added to your project:
cargo add serde --features derive
Example of a JSON POST handler:
use salvo::http::ParseError;
use salvo::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(Deserialize)]
struct CreateTodo {
text: String,
}
#[derive(Serialize)]
struct Todo {
id: u64,
text: String,
}
#[handler]
async fn create_todo(req: &mut Request) -> Result<Json<Todo>, ParseError> {
let payload = req.parse_json::<CreateTodo>().await?;
Ok(Json(Todo {
id: 1,
text: payload.text,
}))
}