📝 [config] Ajustes finales de la documentación

This commit is contained in:
Manuel Cillero 2022-11-04 20:47:37 +01:00
parent 62153ca39a
commit b728a74ee4
5 changed files with 93 additions and 98 deletions

View file

@ -10,19 +10,6 @@ direction = "ltr"
# Rótulo al inicio: "Off", "Slant", "Small", "Speed" o "Starwars". # Rótulo al inicio: "Off", "Slant", "Small", "Speed" o "Starwars".
startup_banner = "Slant" startup_banner = "Slant"
[log]
# Traza de ejecución: "Error", "Warn", "Info", "Debug" o "Trace".
# Ejemplos: "Error,actix_server::builder=Info,tracing_actix_web=Debug".
tracing = "Info"
# En terminal ("Stdout") o archivos "Daily", "Hourly", "Minutely" o "Endless".
rolling = "Stdout"
# Directorio para los archivos de traza (si rolling != "Stdout").
path = "log"
# Prefijo para los archivos de traza (si rolling != "Stdout").
prefix = "tracing.log"
# Presentación de las trazas: "Full", "Compact", "Pretty" o "Json".
format = "Full"
[database] [database]
# Conecta con una base de datos (opcional). # Conecta con una base de datos (opcional).
# Tipo de base de datos (mysql, postgres ó sqlite). # Tipo de base de datos (mysql, postgres ó sqlite).
@ -39,11 +26,6 @@ db_port = 0
# Número máximo de conexiones habilitadas. # Número máximo de conexiones habilitadas.
max_pool_size = 5 max_pool_size = 5
[webserver]
# Configuración del servidor web.
bind_address = "localhost"
bind_port = 8088
[dev] [dev]
# Los archivos estáticos requeridos por temas y componentes incluidos en PageTop # Los archivos estáticos requeridos por temas y componentes incluidos en PageTop
# se integran de manera predeterminada en el binario ejecutable. Sin embargo, es # se integran de manera predeterminada en el binario ejecutable. Sin embargo, es
@ -51,3 +33,21 @@ bind_port = 8088
# que no requiere compilar cada vez que se modifican. En este caso, normalmente, # que no requiere compilar cada vez que se modifican. En este caso, normalmente,
# basta con indicar el directorio "pagetop/static". # basta con indicar el directorio "pagetop/static".
static_files = "" static_files = ""
[log]
# Traza de ejecución: "Error", "Warn", "Info", "Debug" o "Trace".
# Ejemplos: "Error,actix_server::builder=Info,tracing_actix_web=Debug".
tracing = "Info"
# En terminal ("Stdout") o archivos "Daily", "Hourly", "Minutely" o "Endless".
rolling = "Stdout"
# Directorio para los archivos de traza (si rolling != "Stdout").
path = "log"
# Prefijo para los archivos de traza (si rolling != "Stdout").
prefix = "tracing.log"
# Presentación de las trazas: "Full", "Compact", "Pretty" o "Json".
format = "Full"
[server]
# Configuración del servidor web.
bind_address = "localhost"
bind_port = 8088

View file

@ -4,7 +4,7 @@ pub use actix_web::{
pub use actix_web_files::Files as ActixFiles; pub use actix_web_files::Files as ActixFiles;
pub use actix_web_static_files::ResourceFiles; pub use actix_web_static_files::ResourceFiles;
mod config; pub mod config;
pub use config::SETTINGS; pub use config::SETTINGS;
mod banner; mod banner;

View file

@ -53,10 +53,7 @@ impl Application {
.configure(&theme::all::configure_services) .configure(&theme::all::configure_services)
.default_service(super::web::route().to(service_not_found)) .default_service(super::web::route().to(service_not_found))
}) })
.bind(format!( .bind(format!("{}:{}", &SETTINGS.server.bind_address, &SETTINGS.server.bind_port))?
"{}:{}",
&SETTINGS.webserver.bind_address, &SETTINGS.webserver.bind_port
))?
.run(); .run();
Ok(Self { server }) Ok(Self { server })

View file

@ -1,3 +1,5 @@
//! Ajustes globales de la configuración.
use crate::config; use crate::config;
use crate::predefined_settings; use crate::predefined_settings;
use crate::LazyStatic; use crate::LazyStatic;
@ -5,14 +7,14 @@ use crate::LazyStatic;
use serde::Deserialize; use serde::Deserialize;
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
/// Ajustes globales para las secciones [`[app]`](App), [`[log]`](Log), [`[database]`](Database), /// Ajustes globales para las secciones reservadas [`[app]`](App), [`[database]`](Database),
/// [`[webserver]`](Webserver) y [`[dev]`](Dev) reservadas para PageTop ([`SETTINGS`]). /// [`[dev]`](Dev), [`[log]`](Log) y [`[server]`](Server) (ver [`SETTINGS`]).
pub struct Settings { pub struct Settings {
pub app: App, pub app: App,
pub log: Log,
pub database: Database, pub database: Database,
pub webserver: Webserver,
pub dev: Dev, pub dev: Dev,
pub log: Log,
pub server: Server,
} }
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
@ -36,23 +38,6 @@ pub struct App {
pub run_mode: String, pub run_mode: String,
} }
#[derive(Debug, Deserialize)]
/// Sección `[log]` de los ajustes globales.
///
/// Ver [`Settings`].
pub struct Log {
/// Valor predefinido: *"Info"*
pub tracing: String,
/// Valor predefinido: *"Stdout"*
pub rolling: String,
/// Valor predefinido: *"log"*
pub path: String,
/// Valor predefinido: *"tracing.log"*
pub prefix: String,
/// Valor predefinido: *"Full"*
pub format: String,
}
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
/// Sección `[database]` de los ajustes globales. /// Sección `[database]` de los ajustes globales.
/// ///
@ -74,17 +59,6 @@ pub struct Database {
pub max_pool_size: u32, pub max_pool_size: u32,
} }
#[derive(Debug, Deserialize)]
/// Sección `[webserver]` de los ajustes globales.
///
/// Ver [`Settings`].
pub struct Webserver {
/// Valor predefinido: *"localhost"*
pub bind_address: String,
/// Valor predefinido: *"8088"*
pub bind_port: u16,
}
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
/// Sección `[dev]` de los ajustes globales. /// Sección `[dev]` de los ajustes globales.
/// ///
@ -94,9 +68,45 @@ pub struct Dev {
pub static_files: String, pub static_files: String,
} }
/// Declara los ajustes globales para la estructura [`Settings`]. #[derive(Debug, Deserialize)]
/// Sección `[log]` de los ajustes globales.
/// ///
/// Ver [`Cómo usar los ajustes globales de la configuración`](index.html#cómo-usar-los-ajustes-globales-de-la-configuración). /// Ver [`Settings`].
pub struct Log {
/// Valor predefinido: *"Info"*
pub tracing: String,
/// Valor predefinido: *"Stdout"*
pub rolling: String,
/// Valor predefinido: *"log"*
pub path: String,
/// Valor predefinido: *"tracing.log"*
pub prefix: String,
/// Valor predefinido: *"Full"*
pub format: String,
}
#[derive(Debug, Deserialize)]
/// Sección `[server]` de los ajustes globales.
///
/// Ver [`Settings`].
pub struct Server {
/// Valor predefinido: *"localhost"*
pub bind_address: String,
/// Valor predefinido: *"8088"*
pub bind_port: u16,
}
/// Declara e inicializa los ajustes globales para la estructura [`Settings`].
///
/// ```
/// use pagetop::prelude::*;
///
/// fn demo() {
/// println!("App name: {}", &SETTINGS.app.name);
/// println!("App description: {}", &SETTINGS.app.description);
/// println!("Value of PAGETOP_RUN_MODE: {}", &SETTINGS.app.run_mode);
/// }
/// ```
pub static SETTINGS: LazyStatic<Settings> = LazyStatic::new(|| { pub static SETTINGS: LazyStatic<Settings> = LazyStatic::new(|| {
config::try_into::<Settings>(predefined_settings!( config::try_into::<Settings>(predefined_settings!(
// [app] // [app]
@ -107,13 +117,6 @@ pub static SETTINGS: LazyStatic<Settings> = LazyStatic::new(|| {
"app.direction" => "ltr", "app.direction" => "ltr",
"app.startup_banner" => "Slant", "app.startup_banner" => "Slant",
// [log]
"log.tracing" => "Info",
"log.rolling" => "Stdout",
"log.path" => "log",
"log.prefix" => "tracing.log",
"log.format" => "Full",
// [database] // [database]
"database.db_type" => "", "database.db_type" => "",
"database.db_name" => "", "database.db_name" => "",
@ -123,11 +126,18 @@ pub static SETTINGS: LazyStatic<Settings> = LazyStatic::new(|| {
"database.db_port" => "0", "database.db_port" => "0",
"database.max_pool_size" => "5", "database.max_pool_size" => "5",
// [webserver]
"webserver.bind_address" => "localhost",
"webserver.bind_port" => "8088",
// [dev] // [dev]
"dev.static_files" => "" "dev.static_files" => "",
// [log]
"log.tracing" => "Info",
"log.rolling" => "Stdout",
"log.path" => "log",
"log.prefix" => "tracing.log",
"log.format" => "Full",
// [server]
"server.bind_address" => "localhost",
"server.bind_port" => "8088"
)) ))
}); });

View file

@ -39,25 +39,6 @@
//! 3. **config/local.toml**, para añadir o sobrescribir ajustes de los archivos anteriores. //! 3. **config/local.toml**, para añadir o sobrescribir ajustes de los archivos anteriores.
//! //!
//! //!
//! # Cómo usar los ajustes globales de la configuración
//!
//! PageTop incluye un conjunto de ajustes propios ([`Settings`]) accesibles vía [`SETTINGS`] para
//! las secciones reservadas [`[app]`](App), [`[log]`](Log), [`[database]`](Database),
//! [`[webserver]`](Webserver) y [`[dev]`](Dev) de la configuración:
//!
//! ```
//! use pagetop::prelude::*;
//!
//! fn demo() {
//! println!("App name: {}", &SETTINGS.app.name);
//! println!("App description: {}", &SETTINGS.app.description);
//! println!("Value of PAGETOP_RUN_MODE: {}", &SETTINGS.app.run_mode);
//! }
//! ```
//!
//! Los ajustes de configuración siempre son de sólo lectura.
//!
//!
//! # Cómo añadir ajustes de configuración //! # Cómo añadir ajustes de configuración
//! //!
//! Para proporcionar a tu **aplicación** o **módulo** sus propios ajustes de configuración, añade //! Para proporcionar a tu **aplicación** o **módulo** sus propios ajustes de configuración, añade
@ -68,9 +49,9 @@
//! serde = { version = "1.0", features = ["derive"] } //! serde = { version = "1.0", features = ["derive"] }
//! ``` //! ```
//! //!
//! Incluye en tu código una asignación similar a la que usa [`SETTINGS`] para declarar //! Declara ([`LazyStatic`]) e inicializa tus nuevos ajustes con tipos seguros
//! ([`LazyStatic`]) e inicializar tus nuevos ajustes ([`try_into()`]) con tipos seguros y //! ([`config::try_into<S>()`](try_into)) y valores predefinidos
//! valores predefinidos ([`predefined_settings!`](crate::predefined_settings)): //! ([`predefined_settings!`](crate::predefined_settings)):
//! //!
//! ``` //! ```
//! use pagetop::prelude::*; //! use pagetop::prelude::*;
@ -99,14 +80,20 @@
//! }); //! });
//! ``` //! ```
//! //!
//! Y usa la sintaxis TOML para añadir tu nueva sección `[myapp]` en los archivos de configuración, //! De hecho, así se declaran e inicializan los ajustes globales de la configuración
//! del mismo modo que `[app]` o `[webserver]` hacen para los ajustes globales ([`Settings`]). //! ([`SETTINGS`](crate::app::config::SETTINGS)).
//!
//! Usa la sintaxis TOML para añadir tu nueva sección `[myapp]` en los archivos de configuración,
//! del mismo modo que `[log]` o `[server]` hacen para los ajustes globales
//! ([`Settings`](crate::app::config::Settings)).
//! //!
//! Se recomienda inicializar todos los ajustes con valores predefinidos, o utilizar la notación //! Se recomienda inicializar todos los ajustes con valores predefinidos, o utilizar la notación
//! `Option<T>` si van a ser tratados en el código como opcionales. //! `Option<T>` si van a ser tratados en el código como opcionales.
//! //!
//! Los ajustes de configuración siempre son de sólo lectura.
//! //!
//! # Cómo usar los nuevos ajustes de configuración //!
//! # Cómo usar tus nuevos ajustes de configuración
//! //!
//! ``` //! ```
//! fn demo() { //! fn demo() {
@ -185,13 +172,14 @@ static CONFIG_DATA: LazyStatic<ConfigData> = LazyStatic::new(|| {
settings settings
}); });
/// Carga ajustes con tipos seguros y valores predefinidos para tu aplicación o módulo en una /// Carga ajustes con tipos seguros y valores predefinidos para tu aplicación o módulo.
/// estructura similiar a [`SETTINGS`]. ///
/// Detiene la aplicación con un panic! si no pueden asignarse los ajustes de configuración.
/// ///
/// Ver [`Cómo añadir ajustes de configuración`](index.html#cómo-añadir-ajustes-de-configuración). /// Ver [`Cómo añadir ajustes de configuración`](index.html#cómo-añadir-ajustes-de-configuración).
pub fn try_into<T>(values: PredefinedSettings) -> T pub fn try_into<S>(values: PredefinedSettings) -> S
where where
T: Deserialize<'static>, S: Deserialize<'static>,
{ {
let mut settings = CONFIG_DATA.clone(); let mut settings = CONFIG_DATA.clone();
for (key, value) in values.iter() { for (key, value) in values.iter() {