ayun-server 0.23.0

The RUST Framework for Web Rustceans.
Documentation
use crate::{
    traits::{MiddlewareTrait, RequestTrait},
    Middleware,
};
use ayun_config::config;
use tower_http::trace::TraceLayer;

pub struct Logger;

impl MiddlewareTrait for Logger {
    fn handle() -> Middleware {
        Box::new(|router| Ok(router.layer(TraceLayer::new_for_http().make_span_with(make_span))))
    }
}

fn make_span(request: &axum::http::Request<axum::body::Body>) -> tracing::Span {
    let request_id = request
        .id()
        .unwrap_or_else(|| panic!("[middleware] `Logger` applied error: `RequestId` missing"));

    let environment = config::<config::App>("app")
        .unwrap_or_else(|err| panic!("[middleware] `Logger` applied error: {err}"))
        .environment;

    tracing::debug_span!(
        "server",
        "method" = %request.method(),
        "uri" = %request.uri(),
        "version" = ?request.version(),
        "user_agent" = request.user_agent(),
        "request_id" = %request_id,
        "environment" = %environment,
    )
}