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