use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "lowercase")]
pub enum DocumentContent {
Text { text: String },
Auto { base64_data: String },
}
pub type Metadata = HashMap<String, MetadataValue>;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum MetadataValue {
String(String),
Array(Vec<String>),
}
pub type Filter = HashMap<String, serde_json::Value>;
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum LatencyMode {
Low,
High,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum IndexStatus {
NotParsed,
NotIndexed,
Parsing,
ParsingFailed,
Indexing,
IndexingFailed,
Indexed,
}
#[derive(Debug, Deserialize)]
pub struct StatusResponse {
pub num_documents: u64,
pub num_collections: u64,
}
#[derive(Debug, Deserialize)]
pub struct CollectionResponse {
pub message: String,
}
#[derive(Debug, Deserialize)]
pub struct CollectionListResponse {
pub collection_names: Vec<String>,
}
#[derive(Debug, Deserialize)]
pub struct DocumentResponse {
pub message: String,
}
#[derive(Debug, Deserialize)]
pub struct DocumentInfo {
pub path: String,
pub index_status: IndexStatus,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<Metadata>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct DocumentInfoResponse {
pub document: DocumentInfo,
}
#[derive(Debug, Deserialize)]
pub struct DocumentInfoListResponse {
pub documents: Vec<DocumentInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub path_gt: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct PageInfo {
pub path: String,
pub page_number: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct PageInfoResponse {
pub page: PageInfo,
}
#[derive(Debug, Deserialize)]
pub struct DocumentResult {
pub path: String,
pub score: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<Metadata>,
}
#[derive(Debug, Deserialize)]
pub struct TopDocumentsResponse {
pub results: Vec<DocumentResult>,
}
#[derive(Debug, Deserialize)]
pub struct PageResult {
pub path: String,
pub page_index: u32,
pub score: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct TopPagesResponse {
pub results: Vec<PageResult>,
}
#[derive(Debug, Deserialize)]
pub struct SnippetResult {
pub path: String,
pub content: String,
pub score: f64,
pub page_number: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<Metadata>,
}
#[derive(Debug, Deserialize)]
pub struct TopSnippetsResponse {
pub results: Vec<SnippetResult>,
}
#[derive(Debug, Serialize)]
pub struct RerankDocument {
pub id: String,
pub text: String,
}
#[derive(Debug, Deserialize)]
pub struct RerankResult {
pub id: String,
pub score: f64,
pub index: usize,
}
#[derive(Debug, Deserialize)]
pub struct RerankResponse {
pub results: Vec<RerankResult>,
}