Añade servidor web y primeras macros de PageTop

- Crea el crate raíz `pagetop` y configura el workspace con
  `helpers/pagetop-macros`.
- Añade las macros #[pagetop::main] y #[pagetop::test] que envuelven
  Actix-web para crear aplicaciones y pruebas asíncronas sin depender
  explícitamente del framework.
- Reexporta, mediante el módulo `service`, los tipos esenciales de
  Actix-web para gestionar servidores y servicios web.
- Implementa `Application::{new, run, test}` para simplificar el
  arranque y la ejecución de tests.
- Expone `pagetop::prelude` con las macros, `service` y `Application`
  para una API pública coherente.
- Incorpora ejemplo `examples/app-basic.rs` que levanta un servidor web
  vacío con el código mínimo para hacerlo.
This commit is contained in:
Manuel Cillero 2025-07-03 20:33:52 +02:00
parent 45e2882653
commit cbee4c2cb8
13 changed files with 1818 additions and 1 deletions

50
src/app.rs Normal file
View file

@ -0,0 +1,50 @@
//! Prepara y ejecuta una aplicación creada con `Pagetop`.
use crate::service;
use std::io::Error;
pub struct Application;
impl Application {
/// Crea una instancia de la aplicación.
pub fn new() -> Self {
Self
}
/// Ejecuta el servidor web de la aplicación.
pub fn run(self) -> Result<service::Server, Error> {
// Prepara el servidor web.
Ok(service::HttpServer::new(move || Self::service_app())
.bind("localhost:8080")?
.run())
}
/// Prepara el servidor web de la aplicación para pruebas.
pub fn test(
self,
) -> service::App<
impl service::Factory<
service::Request,
Config = (),
Response = service::Response<service::BoxBody>,
Error = service::Error,
InitError = (),
>,
> {
Self::service_app()
}
// Configura el servicio web de la aplicación.
fn service_app() -> service::App<
impl service::Factory<
service::Request,
Config = (),
Response = service::Response<service::BoxBody>,
Error = service::Error,
InitError = (),
>,
> {
service::App::new()
}
}