planner / templates/rest-api/src/main.rs.tmpl

raw file 744 bytes
use axum::{routing::get, Json, Router};
use serde::Serialize;
use std::net::SocketAddr;
use tracing_subscriber::EnvFilter;

#[derive(Serialize)]
struct Health { status: &'static str, service: &'static str }

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    tracing_subscriber::fmt().with_env_filter(EnvFilter::from_default_env()).init();

    let app = Router::new()
        .route("/health", get(|| async { Json(Health { status: "ok", service: "{{name}}" }) }))
        .layer(tower_http::trace::TraceLayer::new_for_http());

    let addr: SocketAddr = "0.0.0.0:3000".parse()?;
    tracing::info!(%addr, "listening");
    let listener = tokio::net::TcpListener::bind(addr).await?;
    axum::serve(listener, app).await?;
    Ok(())
}