1use crate::bson::Document;
2
3use crate::bson::doc;
4use serde::{Deserialize, Serialize};
5use typed_builder::TypedBuilder;
6
7#[serde_with::skip_serializing_none]
9#[derive(Debug, Clone, Default, TypedBuilder, Serialize, Deserialize)]
10#[builder(field_defaults(default, setter(into)))]
11#[non_exhaustive]
12pub struct SearchIndexModel {
13 pub definition: Document,
15
16 pub name: Option<String>,
18
19 #[serde(rename = "type")]
21 pub index_type: Option<SearchIndexType>,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize)]
26#[serde(rename_all = "camelCase")]
27pub enum SearchIndexType {
28 Search,
30 VectorSearch,
32 #[serde(untagged)]
34 Other(String),
35}
36
37pub mod options {
38 #[cfg(docsrs)]
39 use crate::Collection;
40 use macro_magic::export_tokens;
41 use serde::Deserialize;
42 use typed_builder::TypedBuilder;
43
44 #[derive(Clone, Debug, Default, TypedBuilder, Deserialize)]
47 #[builder(field_defaults(default, setter(into)))]
48 #[non_exhaustive]
49 #[export_tokens]
50 pub struct CreateSearchIndexOptions {}
51
52 #[derive(Clone, Debug, Default, TypedBuilder, Deserialize)]
55 #[builder(field_defaults(default, setter(into)))]
56 #[non_exhaustive]
57 #[export_tokens]
58 pub struct UpdateSearchIndexOptions {}
59
60 #[derive(Clone, Debug, Default, TypedBuilder, Deserialize)]
63 #[builder(field_defaults(default, setter(into)))]
64 #[non_exhaustive]
65 #[export_tokens]
66 pub struct ListSearchIndexOptions {}
67
68 #[derive(Clone, Debug, Default, TypedBuilder, Deserialize)]
71 #[builder(field_defaults(default, setter(into)))]
72 #[non_exhaustive]
73 #[export_tokens]
74 pub struct DropSearchIndexOptions {}
75}