Skip to main content

eduboardapi/
lib.rs

1pub mod api;
2pub mod config;
3pub mod exceptions;
4pub mod models;
5pub mod services;
6pub mod utils;
7
8use std::sync::Arc;
9
10use axum::Router;
11use tower_http::LatencyUnit;
12use tower_http::trace::{DefaultMakeSpan, DefaultOnRequest, DefaultOnResponse, TraceLayer};
13use tracing::Level;
14
15use crate::api::fetch::{self, ApiState};
16use crate::config::AppConfig;
17use crate::services::HttpClient;
18
19pub fn build_app() -> Router {
20    build_app_with_config(AppConfig::default())
21}
22
23pub fn build_app_with_config(config: AppConfig) -> Router {
24    let client = Arc::new(HttpClient::new(config));
25    let state = ApiState { client };
26
27    let trace_layer = TraceLayer::new_for_http()
28        .make_span_with(DefaultMakeSpan::new().level(Level::INFO))
29        .on_request(DefaultOnRequest::new().level(Level::INFO))
30        .on_response(
31            DefaultOnResponse::new()
32                .level(Level::INFO)
33                .latency_unit(LatencyUnit::Millis),
34        );
35
36    fetch::router(state).layer(trace_layer)
37}