use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IndexRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub index: Option<String>,
pub documents: Vec<DocumentInput>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentInput {
pub content: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub filename: Option<String>,
pub status: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IndexResponse {
pub results: Vec<DocumentResult>,
#[serde(skip_serializing_if = "Option::is_none")]
pub index_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub download_url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryRequest {
pub query: String,
#[serde(default = "default_top_k")]
pub top_k: usize,
pub index: String,
}
fn default_top_k() -> usize {
5
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryResponse {
pub hits: Vec<SearchHit>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchHit {
pub title: String,
pub content: String,
pub score: f64,
}