JSON de entrada y de salida en Rust
Json es extractor y respuesta a la vez, impulsado por serde sobre tus tipos.
use axum::{routing::post, Json, Router};
use serde::{Deserialize, Serialize};
#[derive(Deserialize)]
struct RunInput {
lang: String,
tpm: u32,
}
#[derive(Serialize)]
struct RunSaved {
stars: u8,
lang: String,
}
async fn save(Json(input): Json<RunInput>) -> Json<RunSaved> {
let stars = if input.tpm >= 100 { 3 } else { 1 };
Json(RunSaved { stars, lang: input.lang })
}
#[tokio::main]
async fn main() {
let app = Router::new().route("/api/results", post(save));
let listener = tokio::net::TcpListener::bind("127.0.0.1:8080")
.await
.unwrap();
axum::serve(listener, app).await.unwrap();
}
Cómo funciona
Json<T>como argumento deserializa el cuerpo de la petición.Json<T>en la posición de retorno serializa la respuesta.- Un cuerpo inválido se vuelve un 422 antes de que tu handler corra.
Palabras clave y builtins usados aquí
Stringasyncawaitelsefnifletstructu32u8use
El intento, en números
- Líneas
- 28
- Caracteres a escribir
- 590
- Tokens
- 174
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 99 segundos.
Paso 2 de 3 en Rutas y handlers; paso 2 de 9 en Servicios web con axum.