use crate::bson::Document;
use crate::bson::doc;
use serde::{Deserialize, Serialize};
use typed_builder::TypedBuilder;
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, Default, TypedBuilder, Serialize, Deserialize)]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
pub struct SearchIndexModel {
pub definition: Document,
pub name: Option<String>,
#[serde(rename = "type")]
pub index_type: Option<SearchIndexType>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum SearchIndexType {
Search,
VectorSearch,
#[serde(untagged)]
Other(String),
}
pub mod options {
#[cfg(docsrs)]
use crate::Collection;
use macro_magic::export_tokens;
use serde::Deserialize;
use typed_builder::TypedBuilder;
#[derive(Clone, Debug, Default, TypedBuilder, Deserialize)]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
#[export_tokens]
pub struct CreateSearchIndexOptions {}
#[derive(Clone, Debug, Default, TypedBuilder, Deserialize)]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
#[export_tokens]
pub struct UpdateSearchIndexOptions {}
#[derive(Clone, Debug, Default, TypedBuilder, Deserialize)]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
#[export_tokens]
pub struct ListSearchIndexOptions {}
#[derive(Clone, Debug, Default, TypedBuilder, Deserialize)]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
#[export_tokens]
pub struct DropSearchIndexOptions {}
}