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}