ossify/ops/vector_bucket/vectors/
delete_vectors.rs1use std::future::Future;
6
7use http::Method;
8use serde::Serialize;
9
10use crate::body::JSONBody;
11use crate::error::Result;
12use crate::response::EmptyResponseProcessor;
13use crate::ser::OnlyKeyField;
14use crate::{Client, Ops, Prepared, Request};
15
16#[derive(Debug, Clone, Default, Serialize)]
17pub struct DeleteVectorsParams {
18 #[serde(rename = "deleteVectors")]
19 delete_vectors: OnlyKeyField,
20}
21
22#[derive(Debug, Clone, Serialize)]
23pub struct DeleteVectorsRequest {
24 #[serde(rename = "indexName")]
25 pub index_name: String,
26 pub keys: Vec<String>,
28}
29
30pub struct DeleteVectors {
31 pub request: DeleteVectorsRequest,
32}
33
34impl Ops for DeleteVectors {
35 type Response = EmptyResponseProcessor;
36 type Body = JSONBody<DeleteVectorsRequest>;
37 type Query = DeleteVectorsParams;
38
39 fn prepare(self) -> Result<Prepared<DeleteVectorsParams, DeleteVectorsRequest>> {
40 Ok(Prepared {
41 method: Method::POST,
42 query: Some(DeleteVectorsParams::default()),
43 body: Some(self.request),
44 ..Default::default()
45 })
46 }
47}
48
49pub trait DeleteVectorsOps {
50 fn delete_vectors(&self, request: DeleteVectorsRequest) -> impl Future<Output = Result<()>>;
56}
57
58impl DeleteVectorsOps for Client {
59 async fn delete_vectors(&self, request: DeleteVectorsRequest) -> Result<()> {
60 self.request(DeleteVectors { request }).await
61 }
62}
63
64#[cfg(test)]
65mod tests {
66 use super::*;
67
68 #[test]
69 fn params_serialize() {
70 assert_eq!(crate::ser::to_string(&DeleteVectorsParams::default()).unwrap(), "deleteVectors");
71 }
72
73 #[test]
74 fn body_serialize() {
75 let req = DeleteVectorsRequest {
76 index_name: "idx1".into(),
77 keys: vec!["a".into(), "b".into(), "c".into()],
78 };
79 let s = serde_json::to_string(&req).unwrap();
80 assert!(s.contains("\"indexName\":\"idx1\""));
81 assert!(s.contains("\"keys\":[\"a\",\"b\",\"c\"]"));
82 }
83}