#![deny(
clippy::as_conversions,
clippy::expect_used,
clippy::future_not_send,
clippy::indexing_slicing,
clippy::panic,
clippy::panic_in_result_fn,
clippy::pedantic,
clippy::string_slice,
clippy::todo,
clippy::unreachable,
clippy::unwrap_used,
unsafe_code
)]
#![allow(
clippy::manual_non_exhaustive,
clippy::missing_errors_doc,
clippy::module_inception,
clippy::module_name_repetitions,
clippy::needless_return
)]
pub mod oui;
use std::sync::Arc;
use axum::{extract::Request, routing::IntoMakeService, serve::Serve, Router, ServiceExt};
pub use state::AppState;
use tokio::net::TcpListener;
use tower_http::{
catch_panic::CatchPanicLayer,
compression::CompressionLayer,
normalize_path::{NormalizePath, NormalizePathLayer},
trace::TraceLayer,
};
use tower_layer::Layer;
mod certificate_serialization;
pub mod config;
pub mod config_file;
mod handlers;
mod mikrotik_api;
mod prometheus_ext;
mod secret_string;
mod state;
mod with_timezone;
pub use mikrotik_api::MikrotikClient;
pub fn create_server(
listener: TcpListener,
state: Arc<AppState>,
) -> Serve<IntoMakeService<NormalizePath<Router>>, NormalizePath<Router>> {
let router = NormalizePathLayer::trim_trailing_slash().layer(
handlers::get_app_router(state)
.layer(TraceLayer::new_for_http())
.layer(CompressionLayer::new())
.layer(CatchPanicLayer::new()),
);
axum::serve(listener, ServiceExt::<Request>::into_make_service(router))
}