Crates.io | pagetop |
lib.rs | pagetop |
version | 0.4.0 |
created_at | 2022-10-13 19:21:57.263696+00 |
updated_at | 2025-09-20 12:02:17.11883+00 |
description | Un entorno de desarrollo para crear soluciones web modulares, extensibles y configurables. |
homepage | https://pagetop.cillero.es |
repository | https://git.cillero.es/manuelcillero/pagetop |
max_upload_size | |
id | 687407 |
size | 1,303,175 |
PageTop reivindica la esencia de la web clásica usando Rust para la creación de soluciones web SSR (renderizadas en el servidor) basadas en HTML, CSS y JavaScript. Ofrece un conjunto de herramientas que los desarrolladores pueden implementar, extender o adaptar según las necesidades de cada proyecto, incluyendo:
Acciones (actions): alteran la lógica interna de una funcionalidad interceptando su flujo de ejecución.
Componentes (components): encapsulan HTML, CSS y JavaScript en unidades funcionales, configurables y reutilizables.
Extensiones (extensions): añaden, extienden o personalizan funcionalidades usando las APIs de PageTop o de terceros.
Temas (themes): son extensiones que permiten modificar la apariencia de páginas y componentes sin comprometer su funcionalidad.
La aplicación más sencilla de PageTop se ve así:
use pagetop::prelude::*;
#[pagetop::main]
async fn main() -> std::io::Result<()> {
Application::new().run()?.await
}
Este código arranca el servidor de PageTop. Con la configuración por defecto, muestra una página de
bienvenida accesible desde un navegador local en la dirección http://localhost:8080
.
Para personalizar el servicio, se puede crear una extensión de PageTop de la siguiente manera:
use pagetop::prelude::*;
struct HelloWorld;
impl Extension for HelloWorld {
fn configure_service(&self, scfg: &mut service::web::ServiceConfig) {
scfg.route("/", service::web::get().to(hello_world));
}
}
async fn hello_world(request: HttpRequest) -> ResultPage<Markup, ErrorPage> {
Page::new(request)
.add_component(Html::with(move |_| html! { h1 { "Hello World!" } }))
.render()
}
#[pagetop::main]
async fn main() -> std::io::Result<()> {
Application::prepare(&HelloWorld).run()?.await
}
Este programa implementa una extensión llamada HelloWorld
que sirve una página web en la ruta raíz
(/
) mostrando el texto "Hello world!" dentro de un elemento HTML <h1>
.
El código se organiza en un workspace donde actualmente se incluyen los siguientes subproyectos:
pagetop-statics, es la librería que permite incluir archivos estáticos en el ejecutable de las aplicaciones PageTop para servirlos de forma eficiente, con detección de cambios que optimizan el tiempo de compilación.
pagetop-build, prepara los archivos estáticos o archivos SCSS compilados para incluirlos en el binario de las aplicaciones PageTop durante la compilación de los ejecutables.
pagetop-macros, proporciona una colección de macros que mejoran la experiencia de desarrollo con PageTop.
Para simplificar el flujo de trabajo, el repositorio incluye varios alias de Cargo declarados en
.cargo/config.toml
. Basta con ejecutarlos desde la raíz del proyecto:
Comando | Descripción |
---|---|
cargo ts |
Ejecuta los tests de pagetop (unit + integration) con la feature testing . |
cargo ts --test util |
Lanza sólo las pruebas de integración del módulo util . |
cargo ts --doc locale |
Lanza las pruebas de la documentación del módulo locale . |
cargo tw |
Ejecuta los tests de todos los paquetes del workspace. |
Nota Estos alias ya compilan con la configuración adecuada. No requieren
--no-default-features
. Si quieres activar las trazas del registro de eventos entonces usa simplementecargo test
.
PageTop es un proyecto personal para aprender Rust y conocer su ecosistema. Su API está sujeta a cambios frecuentes. No se recomienda su uso en producción, al menos hasta que se libere la versión 1.0.0.
El código está disponible bajo una doble licencia:
Licencia MIT (LICENSE-MIT o también https://opensource.org/licenses/MIT)
Licencia Apache, Versión 2.0 (LICENSE-APACHE o también https://www.apache.org/licenses/LICENSE-2.0)
Puedes elegir la licencia que prefieras. Este enfoque de doble licencia es el estándar de facto en el ecosistema Rust.
Cualquier contribución para añadir al proyecto se considerará automáticamente bajo la doble licencia indicada arriba (MIT o Apache v2.0), sin términos o condiciones adicionales, tal y como permite la licencia Apache v2.0.