use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use typed_builder::TypedBuilder;
use crate::{
bson::Document,
bson_util,
concern::{ReadConcern, WriteConcern},
options::Collation,
selection_criteria::SelectionCriteria,
};
#[derive(Clone, Debug, Default, TypedBuilder)]
#[non_exhaustive]
pub struct DatabaseOptions {
#[builder(default)]
pub selection_criteria: Option<SelectionCriteria>,
#[builder(default)]
pub read_concern: Option<ReadConcern>,
#[builder(default)]
pub write_concern: Option<WriteConcern>,
}
#[skip_serializing_none]
#[derive(Debug, Default, TypedBuilder, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct CreateCollectionOptions {
#[builder(default)]
pub capped: Option<bool>,
#[builder(default)]
pub size: Option<i64>,
#[builder(default)]
pub max: Option<i64>,
#[builder(default)]
pub storage_engine: Option<Document>,
#[builder(default)]
#[serde(rename = "validator")]
pub validation: Option<Document>,
#[builder(default)]
pub validation_level: Option<ValidationLevel>,
#[builder(default)]
pub validation_action: Option<ValidationAction>,
#[builder(default)]
pub view_on: Option<String>,
#[builder(default)]
pub pipeline: Option<Vec<Document>>,
#[builder(default)]
pub collation: Option<Collation>,
#[builder(default)]
pub write_concern: Option<WriteConcern>,
#[builder(default)]
pub index_option_defaults: Option<IndexOptionDefaults>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub enum ValidationLevel {
Off,
Strict,
Moderate,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub enum ValidationAction {
Error,
Warn,
}
#[derive(Clone, Debug, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct IndexOptionDefaults {
pub storage_engine: Document,
}
#[derive(Debug, Default, TypedBuilder, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct DropDatabaseOptions {
#[builder(default)]
pub write_concern: Option<WriteConcern>,
}
#[derive(Clone, Debug, Default, Deserialize, TypedBuilder, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct ListCollectionsOptions {
#[builder(default)]
#[serde(
serialize_with = "bson_util::serialize_batch_size",
rename(serialize = "cursor")
)]
pub batch_size: Option<u32>,
}
#[derive(Clone, Debug, Default, Deserialize, TypedBuilder, Serialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct ListDatabasesOptions {
#[builder(default)]
pub authorized_databases: Option<bool>,
}