80 lines
2.8 KiB
Rust
80 lines
2.8 KiB
Rust
//! # pmoserver - Serveur web haut niveau basé sur Axum
|
|
//!
|
|
//! Cette crate fournit une abstraction simple et ergonomique pour créer des serveurs HTTP
|
|
//! avec Axum, spécialement conçue pour les applications UPnP et les serveurs multimédia.
|
|
//!
|
|
//! ## Fonctionnalités
|
|
//!
|
|
//! - 🚀 **API de haut niveau** : Interface simple pour créer des serveurs HTTP avec Axum
|
|
//! - 🎯 **Support UPnP** : Implémentation du trait `UpnpServer` pour connecter des devices UPnP
|
|
//! - 📡 **Server-Sent Events (SSE)** : Support intégré pour les logs en temps réel via SSE
|
|
//! - ⚛️ **Applications SPA** : Support pour servir des applications Single Page (Vue.js, React, etc.)
|
|
//! - 📁 **Fichiers statiques** : Serve de fichiers statiques avec `RustEmbed`
|
|
//! - 🔀 **Redirections** : Support pour les redirections HTTP
|
|
//! - 📚 **Documentation OpenAPI** : Génération automatique de Swagger UI
|
|
//! - ⚡ **Arrêt gracieux** : Gestion propre de l'arrêt sur Ctrl+C
|
|
//!
|
|
//! ## Architecture
|
|
//!
|
|
//! La crate est organisée en plusieurs modules :
|
|
//!
|
|
//! - [`server`] : Implémentation du serveur principal et du builder
|
|
//! - [`logs`] : Système de logs SSE pour monitoring en temps réel
|
|
//! - `upnp_impl` : Implémentation du trait `pmoupnp::UpnpServer` (privé)
|
|
//!
|
|
//! ## Exemple d'utilisation
|
|
//!
|
|
//! ```rust,no_run
|
|
//! use pmoserver::{ServerBuilder, logs::{LogState, SseLayer}};
|
|
//! use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
|
//!
|
|
//! #[tokio::main]
|
|
//! async fn main() {
|
|
//! // Configuration des logs avec SSE
|
|
//! let log_state = LogState::new();
|
|
//! tracing_subscriber::registry()
|
|
//! .with(SseLayer::new(log_state.clone()))
|
|
//! .init();
|
|
//!
|
|
//! // Création et démarrage du serveur
|
|
//! let mut server = ServerBuilder::new("MyServer")
|
|
//! .http_port(8080)
|
|
//! .build();
|
|
//!
|
|
//! // Ajout d'une route JSON
|
|
//! server.add_route("/api/status", || async {
|
|
//! serde_json::json!({"status": "ok"})
|
|
//! }).await;
|
|
//!
|
|
//! // Démarrage
|
|
//! server.start().await;
|
|
//! }
|
|
//! ```
|
|
//!
|
|
//! ## Intégration UPnP
|
|
//!
|
|
//! Le serveur implémente automatiquement le trait `pmoupnp::UpnpServer`, permettant
|
|
//! de connecter des devices UPnP :
|
|
//!
|
|
//! ```rust,no_run
|
|
//! use pmoupnp::{UpnpServer, mediarenderer::device::MEDIA_RENDERER};
|
|
//! use pmoupnp::devices::DeviceInstance;
|
|
//! use pmoserver::ServerBuilder;
|
|
//! use std::sync::Arc;
|
|
//!
|
|
//! # async fn example() {
|
|
//! let mut server = ServerBuilder::new("MediaRenderer").build();
|
|
//! let device = Arc::new(DeviceInstance::new(&MEDIA_RENDERER));
|
|
//!
|
|
//! // Le device enregistre automatiquement ses routes
|
|
//! device.register_urls(&mut server).await;
|
|
//! # }
|
|
//! ```
|
|
|
|
pub mod server;
|
|
pub mod logs;
|
|
mod upnp_impl;
|
|
|
|
pub use server::{Server, ServerBuilder, ServerInfo};
|
|
pub use logs::{LogState, SseLayer, log_sse, log_dump};
|