use crate::bson::{Bson, Document};
use std::time::Duration;
use crate::{
collation::Collation,
concern::WriteConcern,
db::options::{
ChangeStreamPreAndPostImages,
ClusteredIndex,
IndexOptionDefaults,
TimeseriesOptions,
ValidationAction,
ValidationLevel,
},
options::CreateCollectionOptions,
ClientSession,
Database,
};
use super::{deeplink, export_doc, option_setters, options_doc};
impl Database {
#[deeplink]
#[options_doc(create_coll)]
pub fn create_collection(&self, name: impl Into<String>) -> CreateCollection {
CreateCollection {
db: self,
name: name.into(),
options: None,
session: None,
}
}
}
#[cfg(feature = "sync")]
impl crate::sync::Database {
#[deeplink]
#[options_doc(create_coll, sync)]
pub fn create_collection(&self, name: impl Into<String>) -> CreateCollection {
self.async_database.create_collection(name)
}
}
#[must_use]
pub struct CreateCollection<'a> {
pub(crate) db: &'a Database,
pub(crate) name: String,
pub(crate) options: Option<CreateCollectionOptions>,
pub(crate) session: Option<&'a mut ClientSession>,
}
#[option_setters(crate::db::options::CreateCollectionOptions)]
#[export_doc(create_coll)]
impl<'a> CreateCollection<'a> {
pub fn session(mut self, value: impl Into<&'a mut ClientSession>) -> Self {
self.session = Some(value.into());
self
}
}