1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//! Extractor y generador de respuestas JSON (reexporta [`actix_web::web::Json`]).
//!
//! # Uso como extractor JSON
//!
//! Convierte automáticamente el cuerpo de una petición con `Content-Type: application/json` en un
//! tipo Rust fuertemente tipado, validando el formato y deserializando con *serde*.
//!
//! ```rust
//! # use pagetop::prelude::*;
//! #[derive(serde::Deserialize)]
//! struct NuevoUsuario { nombre: String, email: String }
//!
//! /// Manejador configurado para la ruta POST "/usuarios".
//! async fn crear_usuario(payload: Json<NuevoUsuario>) -> HttpResponse {
//! // `payload` ya es `NuevoUsuario`; si la deserialización falla,
//! // devolverá automáticamente 400 Bad Request con un cuerpo JSON que describe el error.
//! HttpResponse::Ok().finish()
//! }
//! ```
//!
//! # Uso como generador de respuestas JSON
//!
//! Serializa valores Rust a JSON y genera una respuesta HTTP con el encabezado apropiado
//! `application/json; charset=utf-8`, todo con una llamada compacta.
//!
//! ```rust
//! # use pagetop::prelude::*;
//! #[derive(serde::Serialize)]
//! struct Usuario { id: u32, nombre: String }
//!
//! async fn obtener_usuario() -> Json<Usuario> {
//! Json(Usuario { id: 1, nombre: "Ada".into() })
//! }
//! ```
//!
//! `Json<T>` funciona con cualquier tipo que implemente `serde::Serialize` (para respuestas) y/o
//! `serde::Deserialize` (para peticiones).
pub use Json;