cedros-admin-server 0.1.0

Shared admin server shell for Cedros admin composition
Documentation
use anyhow::Context;
use tokio::net::TcpListener;
use tower_http::{cors::CorsLayer, trace::TraceLayer};
use tracing::info;

use crate::{router, Config};

pub async fn run(config: Config) -> anyhow::Result<()> {
    let app = router(&config)
        .layer(TraceLayer::new_for_http())
        .layer(CorsLayer::permissive());

    let listener = TcpListener::bind(&config.bind_addr)
        .await
        .with_context(|| format!("failed to bind {}", config.bind_addr))?;

    info!(bind_addr = %config.bind_addr, "cedros-admin server listening");

    axum::serve(listener, app)
        .await
        .context("cedros-admin server failed")
}