1mod 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!") }