metasearch/src/web/mod.rs
2024-04-15 19:19:09 -05:00

67 lines
1.7 KiB
Rust

pub mod autocomplete;
pub mod opensearch;
pub mod search;
use std::{net::SocketAddr, sync::Arc};
use axum::{http::header, routing::get, Router};
use tracing::info;
use crate::config::Config;
pub async fn run(config: Config) {
let bind_addr = config.bind;
let app = Router::new()
.route(
"/",
get(|| async {
(
[(header::CONTENT_TYPE, "text/html; charset=utf-8")],
include_str!("assets/index.html"),
)
}),
)
.route(
"/style.css",
get(|| async {
(
[(header::CONTENT_TYPE, "text/css; charset=utf-8")],
include_str!("assets/style.css"),
)
}),
)
.route(
"/script.js",
get(|| async {
(
[(header::CONTENT_TYPE, "text/javascript; charset=utf-8")],
include_str!("assets/script.js"),
)
}),
)
.route(
"/robots.txt",
get(|| async {
(
[(header::CONTENT_TYPE, "text/plain; charset=utf-8")],
include_str!("assets/robots.txt"),
)
}),
)
.route("/opensearch.xml", get(opensearch::route))
.route("/search", get(search::route))
.route("/autocomplete", get(autocomplete::route))
.with_state(Arc::new(config));
info!("Listening on {bind_addr}");
let listener = tokio::net::TcpListener::bind(bind_addr).await.unwrap();
axum::serve(
listener,
app.into_make_service_with_connect_info::<SocketAddr>(),
)
.await
.unwrap();
}