use crate::error::Error;
use mongodb::{
bson::Document, options::DeleteOptions, results::DeleteResult, ClientSession, Collection,
};
use serde::{Deserialize, Serialize};
pub async fn delete_one<D>(
collection: &Collection<D>,
query: Document,
options: Option<DeleteOptions>,
session: Option<&mut ClientSession>,
) -> Result<DeleteResult, Error>
where
D: Serialize + for<'a> Deserialize<'a> + Send + Sync,
{
let result = if let Some(session) = session {
collection
.delete_one(query)
.with_options(options)
.session(session)
.await
} else {
collection.delete_one(query).with_options(options).await
}
.map_err(Error::Mongo)?;
Ok(result)
}
pub async fn delete_many<D>(
collection: &Collection<D>,
query: Document,
options: Option<DeleteOptions>,
session: Option<&mut ClientSession>,
) -> Result<DeleteResult, Error>
where
D: Serialize + for<'a> Deserialize<'a> + Send + Sync,
{
let result = if let Some(session) = session {
collection
.delete_many(query)
.with_options(options)
.session(session)
.await
} else {
collection.delete_many(query).with_options(options).await
}
.map_err(Error::Mongo)?;
Ok(result)
}