La aplicación Sword
El punto central de una aplicación Sword es la estructura Application. Esta estructura representa la instancia de tu aplicación y proporciona métodos para construirla, configurarla y ejecutarla.
Construcción de la Aplicación
Sword usa un patrón constructor para crear aplicaciones. Se implementa en la estructura ApplicationBuilder, que permite configurar aspectos de la aplicación de forma fluida antes de construir la instancia de Application.
El flujo consiste en llamar a Application::builder() y encadenar métodos:
let app = Application::builder()
.with_module::<SomeModule>()
.build();Internamente, el método builder():
- Inicializa el runtime interno del tipo de aplicación seleccionada.
- Inicializa el estado compartido de la aplicación.
- Carga la configuración desde el fichero
.toml.
Métodos y atributos de la estructura ApplicationBuilder
Atributo config
pub config: ConfigAtributo público que permite acceder a la configuración de la aplicación cargada desde el fichero de configuración. Para más detalles, revisa la sección de Configuración.
Método with_module::<M>()
pub fn with_module<M>(self) -> Self
where
M: Module,Registra un módulo que implementa el trait Module. Los módulos agrupan controladores, componentes y proveedores relacionados.
Parámetros
M: un tipo que implementa el traitModule.
Aprende más en la sección de Módulos.
Método with_layer::<L>(layer: L)
pub fn with_layer<L>(mut self, layer: L) -> SelfRegistra un Layer de Tower de forma global en la aplicación.
Parámetros
layer: una instancia que implementa el traitLayer.
Ejemplo
use tower_http::cors::*;
let cors_layer = CorsLayer::new()
.allow_origin(Any)
.allow_methods(vec!["GET", "POST"]);
let app = Application::builder()
.with_layer(cors_layer)
.build();Para más detalles sobre Tower, revisa Interceptores en controladores web.
Método from_config_path::<P>(path: P)
pub fn from_config_path<P: AsRef<Path>>(path: P) -> ApplicationBuilderCarga la configuración de la aplicación desde un fichero .toml ubicado en una ruta personalizada.
Método from_config(config: Config)
pub fn from_config(config: Config) -> SelfCarga la configuración de la aplicación a partir de una instancia de Config creada manualmente.
Método build()
pub fn build(mut self) -> ApplicationFinaliza la construcción del ApplicationBuilder y devuelve una instancia de Application lista para ejecutarse.
Instancia de la Aplicación
Al construir una instancia de Application, con el método build(), puedes ejecutarla con el método run():
#[sword::main]
async fn main() {
let app = Application::builder()
.with_module::<SomeModule>()
.build();
app.run().await;
}Métodos y atributos de la estructura Application
Método run()
pub async fn run(&self)Inicia el núcleo del tipo de aplicación seleccionado y comienza a escuchar solicitudes.
Si la opción graceful-shutdown está activada, la aplicación maneja las señales de terminación de forma elegante, permitiendo que las solicitudes en curso se completen antes de apagarse.
Método router()
pub fn router(&self) -> axum::RouterDevuelve un clon del router (axum::Router) interno de la aplicación. Es útil para operaciones avanzadas o para inspeccionar la configuración de rutas.
Solo está disponible si habilitaste las features web o socketio.
Ejemplo
let app = Application::builder()
.with_module::<SomeModule>()
.build();
let router: axum::Router = app.router();La función main
En Rust, la ejecución de un programa comienza en la función main. En frameworks asíncronos, esa función debe marcarse con un atributo especial.
Sword provee la macro #[sword::main], que inicializa el runtime interno de la aplicación con tokio y ejecuta la función main de manera asíncrona:
use sword::prelude::*;
#[sword::main]
async fn main() {
let app = Application::builder()
.with_module::<SomeModule>()
.build();
app.run().await;
}Además, al usar este enfoque no necesitas agregar tokio como dependencia en tu proyecto, salvo que lo necesites explícitamente para otras funcionalidades.

