pub mod request_info; pub mod require_auth; use std::{sync::Arc, time::Duration}; use axum::{ BoxError, Router, error_handling::HandleErrorLayer, http::{Method, StatusCode, Uri}, }; use tower::{ServiceBuilder, timeout::TimeoutLayer}; use tracing::warn; use crate::routes::AppState; pub const TIMEOUT_DURATION_SECS: u64 = 30; pub fn apply_root_middleware(router: Router, _state: Arc) -> Router { let timeout_layer = TimeoutLayer::new(Duration::from_secs(TIMEOUT_DURATION_SECS)); let service_builder = ServiceBuilder::new() .layer(HandleErrorLayer::new(handle_timeout_error)) .layer(timeout_layer); router.layer(service_builder) } pub async fn handle_timeout_error( method: Method, uri: Uri, // err: BoxError, ) -> (StatusCode, String) { warn!("`{method} {uri}` failed with {err}"); ( StatusCode::INTERNAL_SERVER_ERROR, "Internal server error".to_string(), ) }