doido_controller/
stack.rs1use axum::{middleware::from_fn, Router};
2use tower_http::{catch_panic::CatchPanicLayer, cors::CorsLayer};
3
4pub struct MiddlewareStack {
5 cors: bool,
6}
7
8impl MiddlewareStack {
9 pub fn new() -> Self {
10 Self { cors: false }
11 }
12
13 pub fn with_cors(mut self) -> Self {
14 self.cors = true;
15 self
16 }
17
18 pub fn apply(self, router: Router) -> Router {
19 let mut r = router
23 .layer(CatchPanicLayer::new())
24 .layer(from_fn(crate::logging::log_requests));
25 if self.cors {
26 r = r.layer(CorsLayer::permissive());
27 }
28 r
29 }
30}
31
32impl Default for MiddlewareStack {
33 fn default() -> Self {
34 Self::new()
35 }
36}