use axum::body::Body;
use axum::extract::State;
use axum::http::{Request, StatusCode};
use axum::middleware::Next;
use axum::response::Response;
use crate::api::AppState;
pub async fn log_rate_limit_events(
State(state): State<AppState>,
req: Request<Body>,
next: Next,
) -> Response {
let mut response = next.run(req).await;
let status = response.status();
let ratelimit_after = if status == StatusCode::TOO_MANY_REQUESTS {
response.headers().get("x-ratelimit-after").and_then(|v| v.to_str().ok().map(|s| s.to_string()))
} else {
None
};
state.rate_limit_service.log_decision(status, ratelimit_after.clone());
if status == StatusCode::TOO_MANY_REQUESTS && let Some(after) = ratelimit_after {
response.headers_mut().insert("retry-after", after.parse().unwrap());
}
response
}