asimov_server/
http.rs

1// This is free and unencumbered software released into the public domain.
2
3mod graphql;
4mod gsp;
5mod mcp;
6mod openai;
7mod openai_v1;
8mod prometheus;
9mod sparql;
10mod well_known;
11
12use axum::{Router, response::Json, routing::get};
13use tokio::net::{TcpListener, ToSocketAddrs};
14use tokio_util::sync::CancellationToken;
15use tower_http::cors::CorsLayer;
16use tracing::info;
17
18pub fn routes() -> Router {
19    Router::new()
20        .merge(graphql::routes())
21        .merge(gsp::routes())
22        .merge(mcp::routes())
23        .merge(openai::routes())
24        .merge(prometheus::routes())
25        .merge(sparql::routes())
26        .merge(well_known::routes())
27        .layer(CorsLayer::permissive())
28        .route("/", get(http_handler))
29}
30
31pub async fn start(addr: impl ToSocketAddrs, cancel: CancellationToken) -> std::io::Result<()> {
32    let listener = TcpListener::bind(addr).await?;
33
34    info!(
35        "Listening for HTTP requests on {}...",
36        listener.local_addr().unwrap()
37    );
38
39    axum::serve(listener, routes())
40        .with_graceful_shutdown(cancel.cancelled_owned())
41        .await
42}
43
44async fn http_handler() -> Json<&'static str> {
45    Json("Hello, world!") // TODO
46}