Stack Middleware
Ordre des slots
Runique applique les middlewares dans un ordre optimal via le système de slots :
Requête entrante
↓
1. Extensions (slot 0) → Injection Tera, Config, Engine
2. ErrorHandler (slot 10) → Capture et rendu des erreurs
3. Custom (slot 20+) → Middlewares personnalisés
4. CSP (slot 30) → Content Security Policy & headers
5. Cache (slot 40) → No-cache en développement
6. Session (slot 50) → Gestion des sessions
7. CSRF (slot 60) → Protection CSRF
8. Host (slot 70) → Validation Allowed Hosts
↓
Handler (votre code)
↓
Réponse sortante (middlewares en sens inverse)
Important : Avec Axum, le dernier
.layer()appliqué est le premier exécuté. Le Builder Intelligent gère cet ordre automatiquement.
Injection de dépendances
Via les Extensions Axum, injectées automatiquement par le middleware Extensions :
// Enregistré automatiquement par le builder :
// Extension(engine) → Arc<RuniqueEngine>
// Extension(tera) → Arc<Tera>
// Extension(config) → Arc<RuniqueConfig>
// Accessible dans les handlers via Request :
pub async fn handler(request: Request) -> AppResult<Response> {
let db = request.engine.db.clone();
let config = &request.engine.config;
// ...
}