use bson::Document;
use serde::Serialize;
use serde_with::skip_serializing_none;
use typed_builder::TypedBuilder;
use crate::{
bson_util,
concern::{ReadConcern, WriteConcern},
options::Collation,
selection_criteria::SelectionCriteria,
};
#[derive(Clone, Debug, Default, TypedBuilder)]
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")]
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)]
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>,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum ValidationLevel {
Off,
Strict,
Moderate,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum ValidationAction {
Error,
Warn,
}
#[derive(Debug, Default, TypedBuilder, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DropDatabaseOptions {
#[builder(default)]
pub write_concern: Option<WriteConcern>,
}
#[derive(Debug, Default, TypedBuilder, Serialize)]
pub struct ListCollectionsOptions {
#[builder(default)]
#[serde(serialize_with = "bson_util::serialize_batch_size", rename = "cursor")]
pub batch_size: Option<u32>,
}