use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct QueryRequest {
pub vector: Vec<f64>,
pub top_k: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub return_values: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub return_metadata: Option<ReturnMetadata>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filter: Option<Value>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum ReturnMetadata {
#[default]
None,
Indexed,
All,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ApiResponse<T> {
pub success: bool,
pub result: Option<T>,
pub errors: Vec<ApiErrorDetail>,
#[allow(dead_code)]
pub messages: Vec<ApiMessage>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ApiErrorDetail {
pub code: u32,
pub message: String,
}
#[derive(Debug, Clone, Deserialize)]
#[allow(dead_code)]
pub struct ApiMessage {
pub code: Option<u32>,
pub message: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct QueryResult {
#[allow(dead_code)]
pub count: u64,
pub matches: Vec<VectorMatch>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct VectorMatch {
pub id: String,
pub score: f64,
#[serde(default)]
#[allow(dead_code)]
pub values: Option<Vec<f64>>,
#[serde(default)]
pub metadata: Option<Value>,
#[serde(default)]
#[allow(dead_code)]
pub namespace: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct VectorInput {
pub id: String,
pub values: Vec<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct UpsertRequest {
pub vectors: Vec<VectorInput>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[allow(dead_code)]
pub struct UpsertResult {
pub mutation_id: String,
}
#[derive(Debug, Clone, Serialize)]
pub struct DeleteByIdsRequest {
pub ids: Vec<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[allow(dead_code)]
pub struct DeleteResult {
pub mutation_id: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ListVectorsResult {
pub count: u64,
pub is_truncated: bool,
pub total_count: u64,
pub vectors: Vec<VectorIdEntry>,
pub next_cursor: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct VectorIdEntry {
pub id: String,
}