diff --git a/pagetop-admin/src/lib.rs b/pagetop-admin/src/lib.rs index 156a4851..96bb1cce 100644 --- a/pagetop-admin/src/lib.rs +++ b/pagetop-admin/src/lib.rs @@ -21,10 +21,11 @@ impl ModuleTrait for Admin { Some(l("module_description")) } + #[rustfmt::skip] fn dependencies(&self) -> Vec { vec![ &pagetop_minimal::Minimal, - &pagetop_megamenu::MegaMenu + &pagetop_megamenu::MegaMenu, ] } diff --git a/pagetop-admin/src/summary.rs b/pagetop-admin/src/summary.rs index f73078e6..a84ebc92 100644 --- a/pagetop-admin/src/summary.rs +++ b/pagetop-admin/src/summary.rs @@ -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 { let top_menu = MegaMenu::new() diff --git a/pagetop-bulmix/src/lib.rs b/pagetop-bulmix/src/lib.rs index ae12db5a..b657b58d 100644 --- a/pagetop-bulmix/src/lib.rs +++ b/pagetop-bulmix/src/lib.rs @@ -16,6 +16,7 @@ impl ModuleTrait for Bulmix { Some(&Bulmix) } + #[rustfmt::skip] fn dependencies(&self) -> Vec { vec![ &pagetop_jquery::JQuery, diff --git a/pagetop/src/core/basic.rs b/pagetop/src/core/basic.rs index 9613c87c..d88e174a 100644 --- a/pagetop/src/core/basic.rs +++ b/pagetop/src/core/basic.rs @@ -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); diff --git a/pagetop/src/core/component/definition.rs b/pagetop/src/core/component/definition.rs index a5be4358..4f88e84d 100644 --- a/pagetop/src/core/component/definition.rs +++ b/pagetop/src/core/component/definition.rs @@ -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; diff --git a/pagetop/src/core/component/html_markup.rs b/pagetop/src/core/component/html_markup.rs index 6def47b2..3b513707 100644 --- a/pagetop/src/core/component/html_markup.rs +++ b/pagetop/src/core/component/html_markup.rs @@ -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); diff --git a/pagetop/src/core/hook/all.rs b/pagetop/src/core/hook/all.rs index a48399fd..6963f88a 100644 --- a/pagetop/src/core/hook/all.rs +++ b/pagetop/src/core/hook/all.rs @@ -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; diff --git a/pagetop/src/core/hook/definition.rs b/pagetop/src/core/hook/definition.rs index 6feb0f76..047bab6d 100644 --- a/pagetop/src/core/hook/definition.rs +++ b/pagetop/src/core/hook/definition.rs @@ -1,4 +1,4 @@ -use crate::util::Handle; +use crate::Handle; pub use std::any::Any as AnyHookAction; diff --git a/pagetop/src/core/module/definition.rs b/pagetop/src/core/module/definition.rs index db155221..d18ed088 100644 --- a/pagetop/src/core/module/definition.rs +++ b/pagetop/src/core/module/definition.rs @@ -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; diff --git a/pagetop/src/lib.rs b/pagetop/src/lib.rs index 17a781f5..9f8d4d0c 100644 --- a/pagetop/src/lib.rs +++ b/pagetop/src/lib.rs @@ -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; diff --git a/pagetop/src/prelude.rs b/pagetop/src/prelude.rs index bc78cb0a..30d2c5c3 100644 --- a/pagetop/src/prelude.rs +++ b/pagetop/src/prelude.rs @@ -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}; // ************************************************************************************************* diff --git a/pagetop/src/response/page/hook.rs b/pagetop/src/response/page/hook.rs index e385f01b..da105f2e 100644 --- a/pagetop/src/response/page/hook.rs +++ b/pagetop/src/response/page/hook.rs @@ -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); diff --git a/pagetop/src/util.rs b/pagetop/src/util.rs index fd0e533a..727ef557 100644 --- a/pagetop/src/util.rs +++ b/pagetop/src/util.rs @@ -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() -> &'static str { partial_type_name(std::any::type_name::(), 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(), - ); - } - }}; -}