karbon_framework/http/middleware/
maintenance.rs1use axum::{extract::Request, http::StatusCode, middleware::Next, response::IntoResponse, response::Response};
2use serde::Serialize;
3use std::sync::atomic::{AtomicBool, Ordering};
4
5pub static MAINTENANCE: AtomicBool = AtomicBool::new(false);
7
8pub fn set_maintenance(enabled: bool) {
10 MAINTENANCE.store(enabled, Ordering::Relaxed);
11}
12
13pub fn is_maintenance() -> bool {
15 MAINTENANCE.load(Ordering::Relaxed)
16}
17
18#[derive(Serialize)]
19struct MaintenanceResponse {
20 error: &'static str,
21 message: &'static str,
22}
23
24pub async fn maintenance_mode(request: Request, next: Next) -> Response {
26 if is_maintenance() {
27 let body = MaintenanceResponse {
28 error: "maintenance",
29 message: "The API is currently under maintenance. Please try again later.",
30 };
31 return (StatusCode::SERVICE_UNAVAILABLE, axum::Json(body)).into_response();
32 }
33
34 next.run(request).await
35}