From 6b38e4b8ae2f667353566408cfab9f2da520c55a Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Sun, 8 May 2022 12:53:16 +0200 Subject: [PATCH] Modifica y depura el uso de la api interna --- drust/src/main.rs | 5 ++-- pagetop/src/core/app/application.rs | 35 ++++++++++++---------------- pagetop/src/core/app/definition.rs | 15 +++++++----- pagetop/src/core/app/mod.rs | 1 - pagetop/src/core/component/assets.rs | 4 ++-- pagetop/src/core/module/all.rs | 8 +++---- pagetop/src/core/module/mod.rs | 5 ---- pagetop/src/core/theme/all.rs | 4 ++-- pagetop/src/core/theme/mod.rs | 5 ---- pagetop/src/lib.rs | 3 +-- pagetop/src/prelude.rs | 8 +++---- 11 files changed, 39 insertions(+), 54 deletions(-) diff --git a/drust/src/main.rs b/drust/src/main.rs index 66a8d192..6b1f4543 100644 --- a/drust/src/main.rs +++ b/drust/src/main.rs @@ -1,13 +1,14 @@ -use pagetop::{prelude::*, core::app::AppTrait}; +use pagetop::prelude::*; struct Drust; impl AppTrait for Drust { - fn enabled_modules(&self) -> Vec<&'static dyn ModuleTrait> { + fn enable_modules(&self) -> Vec<&'static dyn ModuleTrait> { vec![ &pagetop_admin::Admin, &pagetop_user::User, &pagetop_node::Node, + &demopage::Demopage, ] } } diff --git a/pagetop/src/core/app/application.rs b/pagetop/src/core/app/application.rs index 01af2c5b..3069aa19 100644 --- a/pagetop/src/core/app/application.rs +++ b/pagetop/src/core/app/application.rs @@ -5,13 +5,14 @@ use super::AppTrait; use std::io::Error; use actix_web::middleware::normalize::{NormalizePath, TrailingSlash}; +use actix_web::dev::Server; pub struct Application { - server: super::Server, + server: Server, } impl Application { - pub async fn prepare(brrrz: impl AppTrait) -> Result { + pub async fn prepare(app: impl AppTrait) -> Result { // Rótulo de presentación. super::banner::print_on_startup(); @@ -25,36 +26,30 @@ impl Application { #[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))] Lazy::force(&super::db::DBCONN); + // Habilita los módulos de la aplicación. + module::all::enable_modules(app.enable_modules()); + // Registra los temas predeterminados. - theme::register_themes(vec![ + theme::all::register_themes(vec![ &base::theme::aliner::Aliner, &base::theme::minimal::Minimal, &base::theme::bootsier::Bootsier, &base::theme::bulmix::Bulmix, ]); - theme::register_themes(brrrz.register_themes()); - - // Habilita los módulos predeterminados. - module::enable_modules(brrrz.enabled_modules()); - // Habilita el módulo de presentación de PageTop. - // Normalmente se sobrecargará en la función de inicio. - module::enable_module(&base::module::demopage::Demopage); + // Registra los temas de la aplicación. + theme::all::register_themes(app.themes()); // Registra las acciones de todos los módulos. module::all::register_hooks(); - // Ejecuta la función de inicio de la aplicación. - trace::info!("Calling application bootstrap"); - brrrz.bootstrap(); - /* - if let UsingBootstrap::Fn(bootstrap) = bootstrap { - let _ = &bootstrap(); - }*/ - - // Actualizaciones pendientes de la base de datos (opcional). + // Ejecuta actualizaciones pendientes de la base de datos (opcional). #[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))] module::all::run_migrations(); + // Ejecuta la función de inicio de la aplicación. + trace::info!("Calling application bootstrap"); + app.bootstrap(); + // Prepara el servidor web. let server = super::HttpServer::new(move || { super::App::new() @@ -72,7 +67,7 @@ impl Application { Ok(Self { server }) } - pub fn run(self) -> Result { + pub fn run(self) -> Result { Ok(self.server) } } diff --git a/pagetop/src/core/app/definition.rs b/pagetop/src/core/app/definition.rs index 7c13f9b0..4740d223 100644 --- a/pagetop/src/core/app/definition.rs +++ b/pagetop/src/core/app/definition.rs @@ -1,3 +1,4 @@ +use crate::base::module::demopage; use crate::core::module::ModuleTrait; use crate::core::theme::ThemeTrait; @@ -5,15 +6,17 @@ pub trait AppTrait: Send + Sync { fn bootstrap(&self) { } - fn enabled_modules(&self) -> Vec<&'static dyn ModuleTrait> { + fn enable_modules(&self) -> Vec<&'static dyn ModuleTrait> { + vec![ + &demopage::Demopage, + ] + } + + fn disable_modules(&self) -> Vec<&'static dyn ModuleTrait> { vec![] } - fn disabled_modules(&self) -> Vec<&'static dyn ModuleTrait> { - vec![] - } - - fn register_themes(&self) -> Vec<&'static dyn ThemeTrait> { + fn themes(&self) -> Vec<&'static dyn ThemeTrait> { vec![] } } diff --git a/pagetop/src/core/app/mod.rs b/pagetop/src/core/app/mod.rs index 04feaf83..17bd0509 100644 --- a/pagetop/src/core/app/mod.rs +++ b/pagetop/src/core/app/mod.rs @@ -1,7 +1,6 @@ pub use actix_web::{ App, HttpRequest, HttpResponse, HttpServer, Responder, Result, http, web }; -use actix_web::dev::Server; mod banner; diff --git a/pagetop/src/core/component/assets.rs b/pagetop/src/core/component/assets.rs index 1274348d..563e33c9 100644 --- a/pagetop/src/core/component/assets.rs +++ b/pagetop/src/core/component/assets.rs @@ -4,7 +4,7 @@ use crate::html::{Markup, PreEscaped, html}; use crate::core::theme::*; static DEFAULT_THEME: Lazy<&dyn ThemeTrait> = Lazy::new(|| { - match theme_by_single_name(&SETTINGS.app.theme) { + match all::theme_by_single_name(&SETTINGS.app.theme) { Some(theme) => theme, None => &base::theme::bootsier::Bootsier, } @@ -197,7 +197,7 @@ impl Assets { } pub fn using_theme(&mut self, theme_name: &str) -> &mut Self { - self.theme = theme_by_single_name(theme_name).unwrap_or(*DEFAULT_THEME); + self.theme = all::theme_by_single_name(theme_name).unwrap_or(*DEFAULT_THEME); self } diff --git a/pagetop/src/core/module/all.rs b/pagetop/src/core/module/all.rs index ac5e8144..5131a878 100644 --- a/pagetop/src/core/module/all.rs +++ b/pagetop/src/core/module/all.rs @@ -18,11 +18,11 @@ static DISABLED_MODULES: Lazy>> = Lazy::new(|| { pub fn enable_modules(modules: Vec<&'static dyn ModuleTrait>) { for m in modules { - enable_module(m) + enable(m) } } -pub fn enable_module(module: &'static dyn ModuleTrait) { +fn enable(module: &'static dyn ModuleTrait) { let mut list: Vec<&dyn ModuleTrait> = Vec::new(); add_to(&mut list, module); list.reverse(); @@ -43,11 +43,11 @@ fn add_to(list: &mut Vec<&dyn ModuleTrait>, module: &'static dyn ModuleTrait) { } } } - +/* #[allow(unused_variables)] pub fn disable_module(module: &'static dyn ModuleTrait) { } - +*/ pub fn modules(cfg: &mut app::web::ServiceConfig) { for m in ENABLED_MODULES.read().unwrap().iter() { m.configure_service(cfg); diff --git a/pagetop/src/core/module/mod.rs b/pagetop/src/core/module/mod.rs index 424595e3..e50144b5 100644 --- a/pagetop/src/core/module/mod.rs +++ b/pagetop/src/core/module/mod.rs @@ -5,8 +5,3 @@ pub use definition::{ }; pub(crate) mod all; -pub use all::{ - disable_module, - enable_module, - enable_modules, -}; diff --git a/pagetop/src/core/theme/all.rs b/pagetop/src/core/theme/all.rs index ba725b71..dc693e70 100644 --- a/pagetop/src/core/theme/all.rs +++ b/pagetop/src/core/theme/all.rs @@ -13,11 +13,11 @@ static THEMES: Lazy>> = Lazy::new(|| { pub fn register_themes(themes: Vec<&'static dyn ThemeTrait>) { for t in themes { - register_theme(t) + register(t) } } -pub fn register_theme(theme: &'static dyn ThemeTrait) { +fn register(theme: &'static dyn ThemeTrait) { let mut themes = THEMES.write().unwrap(); if !themes.iter().any(|t| t.handler() == theme.handler()) { trace::debug!("Registering theme \"{}\"", theme.single_name()); diff --git a/pagetop/src/core/theme/mod.rs b/pagetop/src/core/theme/mod.rs index 5a4b4060..391a0064 100644 --- a/pagetop/src/core/theme/mod.rs +++ b/pagetop/src/core/theme/mod.rs @@ -5,8 +5,3 @@ pub use definition::{ }; pub(crate) mod all; -pub use all::{ - register_theme, - register_themes, - theme_by_single_name, -}; diff --git a/pagetop/src/lib.rs b/pagetop/src/lib.rs index 64da0481..c4081535 100644 --- a/pagetop/src/lib.rs +++ b/pagetop/src/lib.rs @@ -18,10 +18,9 @@ pub mod html; // HTML en código. #[cfg(any(feature = "mysql", feature = "postgres", feature = "sqlite"))] pub mod db; // Acceso a base de datos. -pub mod core; // Main APIs for actions, components, modules and themes. +pub mod core; // Main APIs for app, components, hooks, modules and themes. pub mod response; // Tipos de respuestas web. -//pub mod app; // Aplicación y servidor web. pub mod base; // Base de componentes, módulos y temas. pub mod util; // Macros y funciones útiles. diff --git a/pagetop/src/prelude.rs b/pagetop/src/prelude.rs index 0495bc70..d271980c 100644 --- a/pagetop/src/prelude.rs +++ b/pagetop/src/prelude.rs @@ -21,20 +21,18 @@ pub use crate::{ }; pub use crate::{hook_item, core::{ -// app::*, + app, component::*, hook::*, module::*, theme::*, }}; -pub use crate::core::app; +pub use crate::core::app::AppTrait; pub use crate::core::app::application::Application; pub use crate::response::page::*; -//pub use crate::app; -//pub use crate::app::application::{Application, UsingBootstrap}; - pub use crate::base::component::*; +pub use crate::base::module::demopage; pub use crate::util;