From 5d2f2939425ba5d3765cae3e7172369ddd750af8 Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Sun, 13 Jul 2025 11:10:06 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Mejora=20definici=C3=B3n=20encap?= =?UTF-8?q?sulando=20uso=20de=20recursos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- helpers/pagetop-build/src/lib.rs | 4 ++-- src/lib.rs | 25 +++++++++++++++++++++++-- src/service.rs | 17 +++++++++-------- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/helpers/pagetop-build/src/lib.rs b/helpers/pagetop-build/src/lib.rs index c48b21f..98c8ef8 100644 --- a/helpers/pagetop-build/src/lib.rs +++ b/helpers/pagetop-build/src/lib.rs @@ -109,10 +109,10 @@ //! } //! ``` //! -//! También se puede acceder al conjunto de recursos declarando un `HashMap` estático global: +//! También se puede asignar el conjunto de recursos a una variable global; p.ej. `GUIDES`: //! //! ```rust,ignore -//! include_files!(HM_GUIDES => guides); +//! include_files!(GUIDES => guides); //! ``` use grass::{from_path, Options, OutputStyle}; diff --git a/src/lib.rs b/src/lib.rs index d64cf55..1ae3589 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -30,12 +30,33 @@ #![cfg_attr(docsrs, feature(doc_cfg))] +use std::collections::HashMap; +use std::ops::Deref; + // RE-EXPORTED ************************************************************************************* pub use pagetop_macros::{builder_fn, html, main, test, AutoDefault}; -/// Representa un conjunto de recursos asociados a `$STATIC` en [`include_files!`]. -pub type StaticResources = std::collections::HashMap<&'static str, static_files::Resource>; +/// Conjunto de recursos asociados a `$STATIC` en [`include_files!`](crate::include_files). +pub struct StaticResources { + bundle: HashMap<&'static str, static_files::Resource>, +} + +impl StaticResources { + /// Crea un contenedor para un conjunto de recursos generado por `build.rs` (consultar + /// [`pagetop_build`](https://docs.rs/pagetop-build)). + pub fn new(bundle: HashMap<&'static str, static_files::Resource>) -> Self { + Self { bundle } + } +} + +impl Deref for StaticResources { + type Target = HashMap<&'static str, static_files::Resource>; + + fn deref(&self) -> &Self::Target { + &self.bundle + } +} // API ********************************************************************************************* diff --git a/src/service.rs b/src/service.rs index 1adaead..9e506fa 100644 --- a/src/service.rs +++ b/src/service.rs @@ -15,18 +15,18 @@ pub use actix_web::test; /// /// # Formas de uso /// -/// * `include_files!(media)` - Incluye el conjunto de recursos llamado `media`. Normalmente se +/// * `include_files!(media)` - Para incluir un conjunto de recursos llamado `media`. Normalmente se /// usará esta forma. /// -/// * `include_files!(BLOG_HM => blog)` - Asigna a la variable estática `BLOG_HM` un conjunto de -/// recursos llamado `blog`. +/// * `include_files!(BLOG => media)` - También se puede asignar el conjunto de recursos a una +/// variable global; p.ej. `BLOG`. /// /// # Argumentos /// /// * `$bundle` – Nombre del conjunto de recursos generado por `build.rs` (consultar /// [`pagetop_build`](https://docs.rs/pagetop-build)). -/// * `$STATIC` – Identificador para la variable estática de tipo -/// [`StaticResources`](`crate::StaticResources`). +/// * `$STATIC` – Asigna el conjunto de recursos a una variable global de tipo +/// [`StaticResources`](crate::StaticResources). /// /// # Ejemplos /// @@ -51,9 +51,10 @@ macro_rules! include_files { mod [] { include!(concat!(env!("OUT_DIR"), "/", stringify!($bundle), ".rs")); } - pub static $STATIC: std::sync::LazyLock = std::sync::LazyLock::new( - []::$bundle - ); + pub static $STATIC: std::sync::LazyLock<$crate::StaticResources> = + std::sync::LazyLock::new( + $crate::StaticResources::new([]::$bundle) + ); } }; }