📝 [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".
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]
# Conecta con una base de datos (opcional).
# Tipo de base de datos (mysql, postgres ó sqlite).
@ -39,11 +26,6 @@ db_port = 0
# Número máximo de conexiones habilitadas.
max_pool_size = 5
[webserver]
# Configuración del servidor web.
bind_address = "localhost"
bind_port = 8088
[dev]
# Los archivos estáticos requeridos por temas y componentes incluidos en PageTop
# 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,
# basta con indicar el directorio "pagetop/static".
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_static_files::ResourceFiles;
mod config;
pub mod config;
pub use config::SETTINGS;
mod banner;

View file

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

View file

@ -1,3 +1,5 @@
//! Ajustes globales de la configuración.
use crate::config;
use crate::predefined_settings;
use crate::LazyStatic;
@ -5,14 +7,14 @@ use crate::LazyStatic;
use serde::Deserialize;
#[derive(Debug, Deserialize)]
/// Ajustes globales para las secciones [`[app]`](App), [`[log]`](Log), [`[database]`](Database),
/// [`[webserver]`](Webserver) y [`[dev]`](Dev) reservadas para PageTop ([`SETTINGS`]).
/// Ajustes globales para las secciones reservadas [`[app]`](App), [`[database]`](Database),
/// [`[dev]`](Dev), [`[log]`](Log) y [`[server]`](Server) (ver [`SETTINGS`]).
pub struct Settings {
pub app: App,
pub log: Log,
pub database: Database,
pub webserver: Webserver,
pub dev: Dev,
pub log: Log,
pub server: Server,
}
#[derive(Debug, Deserialize)]
@ -36,23 +38,6 @@ pub struct App {
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)]
/// Sección `[database]` de los ajustes globales.
///
@ -74,17 +59,6 @@ pub struct Database {
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)]
/// Sección `[dev]` de los ajustes globales.
///
@ -94,9 +68,45 @@ pub struct Dev {
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(|| {
config::try_into::<Settings>(predefined_settings!(
// [app]
@ -107,13 +117,6 @@ pub static SETTINGS: LazyStatic<Settings> = LazyStatic::new(|| {
"app.direction" => "ltr",
"app.startup_banner" => "Slant",
// [log]
"log.tracing" => "Info",
"log.rolling" => "Stdout",
"log.path" => "log",
"log.prefix" => "tracing.log",
"log.format" => "Full",
// [database]
"database.db_type" => "",
"database.db_name" => "",
@ -123,11 +126,18 @@ pub static SETTINGS: LazyStatic<Settings> = LazyStatic::new(|| {
"database.db_port" => "0",
"database.max_pool_size" => "5",
// [webserver]
"webserver.bind_address" => "localhost",
"webserver.bind_port" => "8088",
// [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.
//!
//!
//! # 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
//!
//! 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"] }
//! ```
//!
//! Incluye en tu código una asignación similar a la que usa [`SETTINGS`] para declarar
//! ([`LazyStatic`]) e inicializar tus nuevos ajustes ([`try_into()`]) con tipos seguros y
//! valores predefinidos ([`predefined_settings!`](crate::predefined_settings)):
//! Declara ([`LazyStatic`]) e inicializa tus nuevos ajustes con tipos seguros
//! ([`config::try_into<S>()`](try_into)) y valores predefinidos
//! ([`predefined_settings!`](crate::predefined_settings)):
//!
//! ```
//! 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,
//! del mismo modo que `[app]` o `[webserver]` hacen para los ajustes globales ([`Settings`]).
//! De hecho, así se declaran e inicializan los ajustes globales de la configuración
//! ([`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
//! `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() {
@ -185,13 +172,14 @@ static CONFIG_DATA: LazyStatic<ConfigData> = LazyStatic::new(|| {
settings
});
/// Carga ajustes con tipos seguros y valores predefinidos para tu aplicación o módulo en una
/// estructura similiar a [`SETTINGS`].
/// Carga ajustes con tipos seguros y valores predefinidos para tu aplicación o módulo.
///
/// 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).
pub fn try_into<T>(values: PredefinedSettings) -> T
pub fn try_into<S>(values: PredefinedSettings) -> S
where
T: Deserialize<'static>,
S: Deserialize<'static>,
{
let mut settings = CONFIG_DATA.clone();
for (key, value) in values.iter() {