♻️ Reorganización de macros declarativas

This commit is contained in:
Manuel Cillero 2023-05-14 20:21:25 +02:00
parent 99b08fa201
commit 19af38cb06
13 changed files with 80 additions and 70 deletions

View file

@ -21,10 +21,11 @@ impl ModuleTrait for Admin {
Some(l("module_description")) Some(l("module_description"))
} }
#[rustfmt::skip]
fn dependencies(&self) -> Vec<ModuleStaticRef> { fn dependencies(&self) -> Vec<ModuleStaticRef> {
vec![ vec![
&pagetop_minimal::Minimal, &pagetop_minimal::Minimal,
&pagetop_megamenu::MegaMenu &pagetop_megamenu::MegaMenu,
] ]
} }

View file

@ -1,7 +1,7 @@
use super::l; use super::l;
use pagetop::prelude::*; use pagetop::prelude::*;
use pagetop_minimal::component::*;
use pagetop_megamenu::component::{MegaMenu, MegaMenuItem}; use pagetop_megamenu::component::{MegaMenu, MegaMenuItem};
use pagetop_minimal::component::*;
pub async fn summary(request: server::HttpRequest) -> ResultPage<Markup, FatalError> { pub async fn summary(request: server::HttpRequest) -> ResultPage<Markup, FatalError> {
let top_menu = MegaMenu::new() let top_menu = MegaMenu::new()

View file

@ -16,6 +16,7 @@ impl ModuleTrait for Bulmix {
Some(&Bulmix) Some(&Bulmix)
} }
#[rustfmt::skip]
fn dependencies(&self) -> Vec<ModuleStaticRef> { fn dependencies(&self) -> Vec<ModuleStaticRef> {
vec![ vec![
&pagetop_jquery::JQuery, &pagetop_jquery::JQuery,

View file

@ -1,9 +1,7 @@
use crate::core::module::{ModuleTrait, ThemeStaticRef, ThemeTrait}; use crate::core::module::{ModuleTrait, ThemeStaticRef, ThemeTrait};
use crate::html::Favicon; use crate::html::Favicon;
use crate::response::page::Page; use crate::response::page::Page;
use crate::server; use crate::{define_handle, serve_static_files, server, Handle};
use crate::util::Handle;
use crate::{define_handle, serve_static_files};
define_handle!(THEME_BASIC); define_handle!(THEME_BASIC);

View file

@ -1,7 +1,8 @@
use super::RenderContext; use super::RenderContext;
use crate::html::{html, Markup}; use crate::html::{html, Markup};
use crate::util::{single_type_name, Handle}; use crate::util::single_type_name;
use crate::Handle;
pub use std::any::Any as AnyComponent; pub use std::any::Any as AnyComponent;

View file

@ -1,7 +1,6 @@
use crate::core::component::{AnyComponent, ComponentTrait, RenderContext}; use crate::core::component::{AnyComponent, ComponentTrait, RenderContext};
use crate::html::{html, Markup}; use crate::html::{html, Markup};
use crate::define_handle; use crate::{define_handle, Handle};
use crate::util::Handle;
define_handle!(HTML_MARKUP); define_handle!(HTML_MARKUP);

View file

@ -1,6 +1,5 @@
use super::{ActionsHolder, HookAction}; use super::{ActionsHolder, HookAction};
use crate::util::Handle; use crate::{Handle, LazyStatic};
use crate::LazyStatic;
use std::collections::HashMap; use std::collections::HashMap;
use std::sync::RwLock; use std::sync::RwLock;

View file

@ -1,4 +1,4 @@
use crate::util::Handle; use crate::Handle;
pub use std::any::Any as AnyHookAction; pub use std::any::Any as AnyHookAction;

View file

@ -1,8 +1,8 @@
use super::ThemeStaticRef; use super::ThemeStaticRef;
use crate::core::hook::HookAction; use crate::core::hook::HookAction;
use crate::server; use crate::util::single_type_name;
use crate::util::{single_type_name, Handle}; use crate::{server, Handle};
#[cfg(feature = "database")] #[cfg(feature = "database")]
use crate::db::MigrationItem; use crate::db::MigrationItem;

View file

@ -28,29 +28,40 @@
//! //!
//! * Tipos de respuestas a peticiones web ([`response`]) //! * Tipos de respuestas a peticiones web ([`response`])
//! //!
//! * Utilidades de carácter global ([`util`]). //! * Funciones útiles ([`util`]).
//! //!
//! # 🚧 Advertencia //! # 🚧 Advertencia
//! //!
//! **PageTop** sólo libera actualmente versiones de desarrollo. La API no es estable y los cambios //! **PageTop** sólo libera actualmente versiones de desarrollo. La API no es estable y los cambios
//! son constantes. No puede considerarse preparado hasta que se libere la versión **0.1.0**. //! son constantes. No puede considerarse preparado hasta que se libere la versión **0.1.0**.
// *************************************************************************************************
// GLOBAL. // GLOBAL.
// *************************************************************************************************
pub use concat_string::concat_string; pub use concat_string::concat_string;
pub use doc_comment::doc_comment; pub use doc_comment::doc_comment;
pub use once_cell::sync::Lazy as LazyStatic; pub use once_cell::sync::Lazy as LazyStatic;
pub use paste::paste; pub use paste::paste;
pub use static_files::Resource as StaticResource;
pub use tracing_unwrap::ResultExt; pub use tracing_unwrap::ResultExt;
pub use pagetop_macros::fn_builder; pub use pagetop_macros::fn_builder;
pub type HashMapResources = std::collections::HashMap<&'static str, StaticResource>;
pub type Handle = u64;
// *************************************************************************************************
// LOCAL. // LOCAL.
// *************************************************************************************************
#[allow(unused_imports)] #[allow(unused_imports)]
pub(crate) use futures::executor::block_on as run_now; pub(crate) use futures::executor::block_on as run_now;
// *************************************************************************************************
// APIs PÚBLICAS. // APIs PÚBLICAS.
// *************************************************************************************************
// Gestión de la configuración. // Gestión de la configuración.
pub mod config; pub mod config;
@ -74,12 +85,61 @@ pub mod server;
// Tipos de respuestas a peticiones web. // Tipos de respuestas a peticiones web.
pub mod response; pub mod response;
// Macros y funciones útiles. // Funciones útiles.
pub mod util; pub mod util;
// Prepara y ejecuta la aplicación. // Prepara y ejecuta la aplicación.
pub mod app; pub mod app;
// *************************************************************************************************
// MACROS DECLARATIVAS.
// *************************************************************************************************
#[macro_export]
/// Macro para construir grupos de pares clave-valor.
///
/// ```rust#ignore
/// let args = args![
/// "userName" => "Roberto",
/// "photoCount" => 3,
/// "userGender" => "male"
/// ];
/// ```
macro_rules! args {
( $($key:expr => $value:expr),* ) => {{
let mut a = std::collections::HashMap::new();
$(
a.insert(String::from($key), $value.into());
)*
a
}};
}
#[macro_export]
macro_rules! define_handle {
( $HANDLE:ident ) => {
pub const $HANDLE: $crate::Handle =
$crate::util::handle(module_path!(), file!(), line!(), column!());
};
}
#[macro_export]
macro_rules! serve_static_files {
( $cfg:ident, $dir:expr, $embed:ident ) => {{
let static_files = &$crate::config::SETTINGS.dev.static_files;
if static_files.is_empty() {
$cfg.service($crate::server::ResourceFiles::new($dir, $embed()));
} else {
$cfg.service(
$crate::server::ActixFiles::new($dir, $crate::concat_string!(static_files, $dir))
.show_files_listing(),
);
}
}};
}
// *************************************************************************************************
// RE-EXPORTA API ÚNICA. // RE-EXPORTA API ÚNICA.
// *************************************************************************************************
pub mod prelude; pub mod prelude;

View file

@ -1,12 +1,11 @@
// Re-exports. // Re-exports.
pub use crate::{concat_string, fn_builder, LazyStatic, ResultExt}; pub use crate::{concat_string, fn_builder, Handle, HashMapResources, LazyStatic, ResultExt};
// Macros. // Macros declarativas.
pub use crate::{args, paste, define_config, define_handle, define_locale, serve_static_files}; pub use crate::{args, define_config, define_handle, define_locale, paste, serve_static_files};
// Helpers. // Funciones útiles.
pub use crate::util; pub use crate::util;
pub use crate::util::{Handle, HashMapResources};
// ************************************************************************************************* // *************************************************************************************************

View file

@ -1,7 +1,6 @@
use super::Page; use super::Page;
use crate::core::hook::{AnyHookAction, HookActionTrait}; use crate::core::hook::{AnyHookAction, HookActionTrait};
use crate::define_handle; use crate::{define_handle, Handle};
use crate::util::Handle;
define_handle!(HOOK_BEFORE_RENDER_PAGE); define_handle!(HOOK_BEFORE_RENDER_PAGE);

View file

@ -1,8 +1,4 @@
pub use static_files::Resource as StaticResource; use crate::Handle;
pub type HashMapResources = std::collections::HashMap<&'static str, StaticResource>;
pub type Handle = u64;
// https://stackoverflow.com/a/71464396 // https://stackoverflow.com/a/71464396
pub const fn handle( pub const fn handle(
@ -38,14 +34,6 @@ pub const fn handle(
hash hash
} }
#[macro_export]
macro_rules! define_handle {
( $HANDLE:ident ) => {
pub const $HANDLE: $crate::util::Handle =
$crate::util::handle(module_path!(), file!(), line!(), column!());
};
}
pub fn partial_type_name(type_name: &'static str, last: usize) -> &'static str { pub fn partial_type_name(type_name: &'static str, last: usize) -> &'static str {
if last == 0 { if last == 0 {
return type_name; return type_name;
@ -60,38 +48,3 @@ pub fn partial_type_name(type_name: &'static str, last: usize) -> &'static str {
pub fn single_type_name<T: ?Sized>() -> &'static str { pub fn single_type_name<T: ?Sized>() -> &'static str {
partial_type_name(std::any::type_name::<T>(), 1) partial_type_name(std::any::type_name::<T>(), 1)
} }
#[macro_export]
/// Macro para construir grupos de pares clave-valor.
///
/// ```rust#ignore
/// let args = args![
/// "userName" => "Roberto",
/// "photoCount" => 3,
/// "userGender" => "male"
/// ];
/// ```
macro_rules! args {
( $($key:expr => $value:expr),* ) => {{
let mut a = std::collections::HashMap::new();
$(
a.insert(String::from($key), $value.into());
)*
a
}};
}
#[macro_export]
macro_rules! serve_static_files {
( $cfg:ident, $dir:expr, $embed:ident ) => {{
let static_files = &$crate::config::SETTINGS.dev.static_files;
if static_files.is_empty() {
$cfg.service($crate::server::ResourceFiles::new($dir, $embed()));
} else {
$cfg.service(
$crate::server::ActixFiles::new($dir, $crate::concat_string!(static_files, $dir))
.show_files_listing(),
);
}
}};
}