♻️ 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"))
}
#[rustfmt::skip]
fn dependencies(&self) -> Vec<ModuleStaticRef> {
vec![
&pagetop_minimal::Minimal,
&pagetop_megamenu::MegaMenu
&pagetop_megamenu::MegaMenu,
]
}

View file

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

View file

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

View file

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

View file

@ -1,7 +1,8 @@
use super::RenderContext;
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;

View file

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

View file

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

View file

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

View file

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

View file

@ -28,29 +28,40 @@
//!
//! * Tipos de respuestas a peticiones web ([`response`])
//!
//! * Utilidades de carácter global ([`util`]).
//! * Funciones útiles ([`util`]).
//!
//! # 🚧 Advertencia
//!
//! **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**.
// *************************************************************************************************
// GLOBAL.
// *************************************************************************************************
pub use concat_string::concat_string;
pub use doc_comment::doc_comment;
pub use once_cell::sync::Lazy as LazyStatic;
pub use paste::paste;
pub use static_files::Resource as StaticResource;
pub use tracing_unwrap::ResultExt;
pub use pagetop_macros::fn_builder;
pub type HashMapResources = std::collections::HashMap<&'static str, StaticResource>;
pub type Handle = u64;
// *************************************************************************************************
// LOCAL.
// *************************************************************************************************
#[allow(unused_imports)]
pub(crate) use futures::executor::block_on as run_now;
// *************************************************************************************************
// APIs PÚBLICAS.
// *************************************************************************************************
// Gestión de la configuración.
pub mod config;
@ -74,12 +85,61 @@ pub mod server;
// Tipos de respuestas a peticiones web.
pub mod response;
// Macros y funciones útiles.
// Funciones útiles.
pub mod util;
// Prepara y ejecuta la aplicación.
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.
// *************************************************************************************************
pub mod prelude;

View file

@ -1,12 +1,11 @@
// Re-exports.
pub use crate::{concat_string, fn_builder, LazyStatic, ResultExt};
pub use crate::{concat_string, fn_builder, Handle, HashMapResources, LazyStatic, ResultExt};
// Macros.
pub use crate::{args, paste, define_config, define_handle, define_locale, serve_static_files};
// Macros declarativas.
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::{Handle, HashMapResources};
// *************************************************************************************************

View file

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

View file

@ -1,8 +1,4 @@
pub use static_files::Resource as StaticResource;
pub type HashMapResources = std::collections::HashMap<&'static str, StaticResource>;
pub type Handle = u64;
use crate::Handle;
// https://stackoverflow.com/a/71464396
pub const fn handle(
@ -38,14 +34,6 @@ pub const fn handle(
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 {
if last == 0 {
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 {
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(),
);
}
}};
}