by_axum/
lib.rs

1// pub mod auth;
2pub mod axum;
3
4#[cfg(feature = "lambda")]
5pub mod lambda_adapter;
6
7pub use tower_http::cors;
8use tower_http::cors::{AllowHeaders, AllowMethods, AllowOrigin, CorsLayer};
9
10mod docs;
11use std::sync::Arc;
12
13use ::axum::{Extension, Json, Router};
14
15pub use logger as log;
16use router::BiyardRouter;
17
18pub mod logger;
19pub mod router;
20pub use aide;
21
22pub use by_types::ApiError;
23pub type Result<T, E> = std::result::Result<Json<T>, ApiError<E>>;
24pub use schemars;
25use tracing_subscriber::EnvFilter;
26
27pub fn new() -> BiyardRouter {
28    let _ = tracing_subscriber::fmt()
29        .with_env_filter(EnvFilter::from(option_env!("RUST_LOG").unwrap_or("info")))
30        .with_file(true)
31        .with_line_number(true)
32        .with_thread_ids(true)
33        .with_target(false)
34        .with_ansi(
35            option_env!("DISABLE_ANSI")
36                .map(|e| e.to_lowercase() == "true")
37                .unwrap_or(true),
38        )
39        .try_init();
40
41    BiyardRouter::new()
42}
43
44pub fn finishing(app: BiyardRouter) -> Router {
45    let mut api = app.open_api;
46    app.inner
47        .finish_api(&mut api)
48        .layer(Extension(Arc::new(api)))
49}
50
51pub async fn serve(
52    _tcp_listener: tokio::net::TcpListener,
53    app: BiyardRouter,
54) -> std::result::Result<(), Box<dyn std::error::Error>> {
55    let app = app.layer(
56        CorsLayer::new()
57            .allow_origin(AllowOrigin::mirror_request())
58            .allow_credentials(true)
59            .allow_methods(AllowMethods::mirror_request())
60            .allow_headers(AllowHeaders::mirror_request()),
61    );
62    serve_wo_cors_layer(_tcp_listener, app).await
63}
64
65pub async fn serve_wo_cors_layer(
66    _tcp_listener: tokio::net::TcpListener,
67    app: BiyardRouter,
68) -> std::result::Result<(), Box<dyn std::error::Error>> {
69    let mut api = app.open_api;
70    let app = app
71        .inner
72        .finish_api(&mut api)
73        .layer(Extension(Arc::new(api)));
74
75    #[cfg(not(feature = "lambda"))]
76    axum::serve(_tcp_listener, app).await?;
77
78    #[cfg(feature = "lambda")]
79    {
80        lambda_runtime::run(lambda_adapter::LambdaAdapter::from(app.into_service()))
81            .await
82            .unwrap();
83    }
84
85    Ok(())
86}