Expand description
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): permiten modificar la apariencia de páginas y componentes sin comprometer su funcionalidad.
§⚡️ Guía rápida
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
}
Por defecto, este código sirve una página web de bienvenida accesible desde un navegador en la
dirección http://localhost:8088
, siguiendo la configuración predeterminada.
Para personalizar el servicio, puedes crear una extensión de PageTop
de la siguiente manera:
use pagetop::prelude::*;
struct HelloWorld;
impl ExtensionTrait 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)
.with_component(Html::with(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>
.
§🧩 Gestión de Dependencias
Los proyectos que utilizan PageTop
gestionan las dependencias con cargo
, como cualquier otro
proyecto en Rust.
Sin embargo, es fundamental que cada extensión declare explícitamente sus
dependencias, si las tiene, para que
PageTop
pueda estructurar e inicializar la aplicación de forma modular.
Modules§
- app
- Prepara y ejecuta una aplicación creada con
Pagetop
. - base
- Acciones, componentes, extensiones y temas base de
PageTop
. - config
- Carga las opciones de configuración.
- core
- Tipos y funciones esenciales para crear acciones, componentes, extensiones y temas.
- datetime
- Soporte a fechas y horas según estándar ISO 8601 (chrono).
- global
- Opciones de configuración globales.
- html
- HTML en código.
- locale
- Localización (L10n).
- prelude
- Prelude de
PageTop
. - response
- Respuestas a las peticiones web en sus diferentes variantes.
- service
- Gestión del servidor y servicios web (actix-web).
- trace
- Gestión de trazas y registro de eventos de la aplicación.
- util
- Funciones y macros útiles.
Macros§
- actions
- hm
- Macro para construir una colección de pares clave-valor.
- html
- include_
config - include_
files - include_
files_ service - include_
locales - Define un conjunto de elementos de localización y textos de traducción local.
- join_
string - Concatena varios fragmentos de cadenas (string slices) en una cadena
String
. - option_
string - Concatena varios fragmentos de cadenas (string slices) en una cadena
String
utilizando opcionalmente un separador. - strict_
string - Concatena varios fragmentos de cadenas (string slices) en una cadena
String
únicamente si ninguna es vacía. - trio_
string - Concatena dos fragmentos de cadenas (string slices) en una cadena
String
con un separador.
Type Aliases§
- Static
Resources - Unique
Id - Un
UniqueId
representa un identificador único global para un tipo. - Weight
Attribute Macros§
- fn_
builder - Macro (attribute) que asocia un método builder
with_
con un métodoalter_
equivalente que modifica la instancia actual usando una única implementación. - main
- Define una función
main
asíncrona como punto de entrada dePageTop
. - test
- Define funciones de prueba asíncronas para usar con
PageTop
.