Files
pmomusic/pmoserver/src/config_ext.rs

50 lines
1.5 KiB
Rust

//! Extension pour intégrer l'API de configuration de pmoconfig dans pmoserver
//!
//! Ce module fournit le trait `ConfigExt` qui permet d'ajouter facilement
//! l'API REST de configuration au serveur.
use crate::Server;
use anyhow::Result;
use pmoconfig::{ApiDoc, api, get_config};
use utoipa::OpenApi;
/// Trait d'extension pour ajouter l'API de configuration à pmoserver
pub trait ConfigExt {
/// Initialise l'API de configuration et enregistre les routes HTTP
///
/// # Routes enregistrées
///
/// - `GET /api/config` - Récupérer toute la configuration
/// - `GET /api/config/{path}` - Récupérer une valeur spécifique (ex: host.http_port)
/// - `POST /api/config` - Mettre à jour une valeur
/// - `GET /swagger-ui/config` - Documentation interactive Swagger
///
/// # Exemple
///
/// ```rust,ignore
/// use pmoserver::{ServerBuilder, ConfigExt};
///
/// #[tokio::main]
/// async fn main() -> anyhow::Result<()> {
/// let mut server = ServerBuilder::new_configured().build();
/// server.init_config_api().await?;
/// server.start().await;
/// Ok(())
/// }
/// ```
async fn init_config_api(&mut self) -> Result<()>;
}
impl ConfigExt for Server {
async fn init_config_api(&mut self) -> Result<()> {
let config = get_config();
// API REST pour la configuration
let api_router = api::create_router(config);
let openapi = ApiDoc::openapi();
self.add_openapi(api_router, openapi, "config").await;
Ok(())
}
}