pub mod impls;
use mongodb::Client;
#[derive(Clone, Debug)]
pub struct MongoDB {
client: Client,
database: String,
}
impl MongoDB {
pub fn new(client: Client, database: impl Into<String>) -> Self {
Self {
client,
database: database.into(),
}
}
pub async fn connect(uri: &str, database: impl Into<String>) -> vantage_core::Result<Self> {
let client = Client::with_uri_str(uri).await.map_err(|e| {
vantage_core::error!("Failed to connect to MongoDB", details = e.to_string())
})?;
Ok(Self::new(client, database))
}
pub fn database(&self) -> mongodb::Database {
self.client.database(&self.database)
}
pub fn collection<T: Send + Sync>(&self, name: &str) -> mongodb::Collection<T> {
self.database().collection(name)
}
pub fn doc_collection(&self, name: &str) -> mongodb::Collection<bson::Document> {
self.database().collection(name)
}
}