sword_layers/
not_found.rs

1use crate::ResponseFnMapper;
2use axum::{
3    http::StatusCode,
4    response::{IntoResponse, Response},
5};
6use axum_responses::JsonResponse;
7use tower::{ServiceBuilder, util::MapResponseLayer};
8use tower_layer::{Identity, Stack};
9
10pub struct NotFoundLayer;
11
12impl NotFoundLayer {
13    pub fn new() -> ServiceBuilder<Stack<MapResponseLayer<ResponseFnMapper>, Identity>> {
14        ServiceBuilder::new().map_response(|r: Response| {
15            if r.status() != StatusCode::NOT_FOUND {
16                return r;
17            }
18
19            JsonResponse::NotFound()
20                .message("The requested resource was not found.")
21                .into_response()
22        })
23    }
24}