use crate::model::{
CreateCollectionResponse, CreateRecordRequest, GetRecordRequest, HybridQueryVectorRecordRequest, PayloadResponse, QueryRecordsRequest, QueryRecordsResponse, UpdateRecordRequest, VectorFreeSearch
};
use crate::SmrithiClient;
use anyhow::{Result, Context}; impl SmrithiClient {
pub async fn create_record(
&self,
req: CreateRecordRequest,
) -> Result<CreateCollectionResponse> {
let url = format!("{}/db/create-record", self.base_url);
let res = self.client
.post(url)
.json(&req)
.send()
.await?;
let body = res.json::<CreateCollectionResponse>().await?;
Ok(body)
}
pub async fn query_records(
&self,
req: QueryRecordsRequest,
) -> Result<QueryRecordsResponse> {
let url = format!("{}/db/query-records", self.base_url);
let res = self.client
.post(url)
.json(&req)
.send()
.await
.context("Failed to send POST request to query_records")?;
let text = res.text().await?;
let body: QueryRecordsResponse = serde_json::from_str(&text)
.with_context(|| format!("Failed to parse JSON response: {}", text))?;
Ok(body)
}
pub async fn delete_record(
&self,
req:GetRecordRequest
)->Result<PayloadResponse>{
let url = format!("{}/db/delete-record", self.base_url);
let res = self.client
.delete(url)
.json(&req)
.send()
.await?;
let status = res.status();
let text = res.text().await?;
println!("Status: {}", status);
println!("Raw Body: {}", text);
if text.trim().is_empty() {
return Err(anyhow::anyhow!("Server returned an empty response with status {}", status));
}
let body: PayloadResponse = serde_json::from_str(&text)
.with_context(|| format!("Failed to parse delete response: {}", text))?;
Ok(body)
}
pub async fn update_record(
&self,
req:UpdateRecordRequest
)->Result<PayloadResponse>{
let url = format!("{}/db/update-record", self.base_url);
let res = self.client
.put(url)
.json(&req)
.send()
.await?;
let status = res.status();
let text = res.text().await?;
println!("Status: {}", status);
println!("Raw Body: {}", text);
if text.trim().is_empty() {
return Err(anyhow::anyhow!("Server returned an empty response with status {}", status));
}
let body: PayloadResponse = serde_json::from_str(&text)
.with_context(|| format!("Failed to parse update response: {}", text))?;
Ok(body)
}
}