Skip to main content

cedros_admin/
server.rs

1use anyhow::Context;
2use tokio::net::TcpListener;
3use tower_http::{cors::CorsLayer, trace::TraceLayer};
4use tracing::info;
5
6use crate::{router, Config};
7
8pub async fn run(config: Config) -> anyhow::Result<()> {
9    let app = router(&config)
10        .layer(TraceLayer::new_for_http())
11        .layer(CorsLayer::permissive());
12
13    let listener = TcpListener::bind(&config.bind_addr)
14        .await
15        .with_context(|| format!("failed to bind {}", config.bind_addr))?;
16
17    info!(bind_addr = %config.bind_addr, "cedros-admin server listening");
18
19    axum::serve(listener, app)
20        .await
21        .context("cedros-admin server failed")
22}