pagetop/src/global.rs
Manuel Cillero dbf0894894 (bootsier): Añade ajuste dev.bootsier_static_dir
Permite servir `css`, `js` y `fonts` desde disco mientras la aplicación
está en ejecución, sin necesidad de recompilar.
2026-06-20 19:47:19 +02:00

130 lines
5 KiB
Rust

//! Opciones de configuración globales.
use crate::include_config;
use serde::Deserialize;
mod lang_negotiation;
pub use lang_negotiation::LangNegotiation;
mod startup_banner;
pub use startup_banner::StartupBanner;
mod log_rolling;
pub use log_rolling::LogRolling;
mod log_format;
pub use log_format::LogFormat;
// **< SETTINGS >***********************************************************************************
include_config!(SETTINGS: Settings => [
// [app]
"app.name" => "PageTop App",
"app.description" => "Developed with the amazing PageTop framework.",
"app.theme" => "Basic",
"app.lang_negotiation" => "Full",
"app.startup_banner" => "Slant",
// [dev]
"dev.pagetop_static_dir" => "",
// [log]
"log.enabled" => true,
"log.tracing" => "Info",
"log.rolling" => "Stdout",
"log.path" => "log",
"log.prefix" => "tracing.log",
"log.format" => "Full",
// [server]
"server.bind_address" => "localhost",
"server.bind_port" => 8080,
]);
// **< Settings >***********************************************************************************
/// Ajustes para las secciones globales [`App`], [`Dev`], [`Log`] y [`Server`] de [`SETTINGS`].
#[derive(Debug, Deserialize)]
pub struct Settings {
pub app: App,
pub dev: Dev,
pub log: Log,
pub server: Server,
}
/// Sección **`[app]`** de la configuración. Forma parte de [`Settings`].
#[derive(Debug, Deserialize)]
pub struct App {
/// Nombre de la aplicación.
pub name: String,
/// Breve descripción de la aplicación.
pub description: String,
/// Tema predeterminado.
pub theme: String,
/// Idioma predeterminado de la aplicación (p. ej., *"es-ES"* o *"en-US"*).
///
/// Cuando tiene un valor validado por [`Locale`](crate::locale::Locale), se usa como candidato
/// para resolver el idioma efectivo de cada petición según la estrategia definida en
/// [`lang_negotiation`](Self::lang_negotiation) y aplicada por
/// [`RequestLocale`](crate::locale::RequestLocale).
///
/// Si es `None` o no contiene un valor válido, la negociación del idioma pasa a depender de
/// otras fuentes como la cabecera `Accept-Language` de la petición o, en último término, del
/// idioma de respaldo configurado en el sistema.
pub language: Option<String>,
/// Estrategia para resolver el idioma usado en la petición: *"Full"*, *"NoQuery"* o
/// *"ConfigOnly"*.
///
/// Define las fuentes que intervienen en la negociación del idioma para el renderizado de los
/// documentos y la generación de URLs. Ver [`LangNegotiation`] para los modos disponibles.
pub lang_negotiation: LangNegotiation,
/// Banner ASCII mostrado al inicio: *"Off"* (desactivado), *"Slant"*, *"Small"*, *"Speed"* o
/// *"Starwars"*.
pub startup_banner: StartupBanner,
/// Modo de ejecución, dado por la variable de entorno `PAGETOP_RUN_MODE`, o *"default"* si no
/// está definido.
pub run_mode: String,
}
/// Sección **`[dev]`** de la configuración. Forma parte de [`Settings`].
#[derive(Debug, Deserialize)]
pub struct Dev {
/// Directorio raíz de `static/` para servir los archivos estáticos propios de PageTop.
///
/// Si se indica una ruta válida, absoluta o relativa al directorio del proyecto o del binario
/// en ejecución, los archivos estáticos se servirán desde disco. Útil para poder modificar los
/// archivos estáticos mientras la aplicación está en ejecución, sin necesidad de recompilar.
///
/// Si la cadena está vacía, se ignora este ajuste.
pub pagetop_static_dir: String,
}
/// Sección **`[log]`** de la configuración. Forma parte de [`Settings`].
#[derive(Debug, Deserialize)]
pub struct Log {
/// Gestión de trazas y registro de eventos activada (*true*) o desactivada (*false*).
pub enabled: bool,
/// Opciones, o combinación de opciones separadas por comas, para filtrar las trazas: *"Error"*,
/// *"Warn"*, *"Info"*, *"Debug"* o *"Trace"*.
/// Ejemplo: *"Error,tower_http=Debug,axum::rejection=trace"*.
pub tracing: String,
/// Muestra los mensajes de traza en el terminal (*"Stdout"*) o los vuelca en archivos con
/// rotación: *"Daily"*, *"Hourly"*, *"Minutely"* o *"Endless"*.
pub rolling: LogRolling,
/// Directorio para los archivos de traza (si [`rolling`](Self::rolling) ≠ *"Stdout"*).
pub path: String,
/// Prefijo para los archivos de traza (si [`rolling`](Self::rolling) ≠ *"Stdout"*).
pub prefix: String,
/// Formato de salida de las trazas. Opciones: *"Full"*, *"Compact"*, *"Pretty"* o *"Json"*.
pub format: LogFormat,
}
/// Sección **`[server]`** de la configuración. Forma parte de [`Settings`].
#[derive(Debug, Deserialize)]
pub struct Server {
/// Dirección de enlace para el servidor web.
pub bind_address: String,
/// Puerto de escucha del servidor web.
pub bind_port: u16,
}