use axum::{
extract::{Query, State},
http::StatusCode,
response::{IntoResponse, Json, Response},
};
use serde::Deserialize;
use std::sync::Arc;
use crate::cmd::webui::server::AppState;
#[derive(Deserialize)]
pub struct SearchParams {
pub q: String,
#[serde(default = "default_limit")]
pub limit: usize,
}
fn default_limit() -> usize {
20
}
pub async fn search(
Query(params): Query<SearchParams>,
State(state): State<Arc<AppState>>,
) -> Response {
match state.search_index.search(¶ms.q, params.limit) {
Ok(results) => Json(results).into_response(),
Err(e) => (StatusCode::INTERNAL_SERVER_ERROR, e.to_string()).into_response(),
}
}