use crate::entity::MongoEntity;
use crate::repo::MongoRepo;
use mongodb::{Client, Database};
use std::error::Error;
use std::sync::Arc;
#[derive(Debug)]
pub struct MongoInstance {
pub db: Arc<Database>,
pub client: Client,
}
impl MongoInstance {
pub async fn setup(uri: &str) -> Result<MongoInstance, Box<dyn Error + Send + Sync>> {
let client = Client::with_uri_str(uri).await?;
let db = client.default_database().unwrap();
Ok(MongoInstance {
db: Arc::new(db),
client,
})
}
pub async fn drop_database(&self) {
let db: &Database = self.db.as_ref();
db.drop().await.unwrap();
}
pub fn repo<T: MongoEntity>(&self, name: &str) -> MongoRepo<T> {
MongoRepo::new(self.db.clone().collection(name))
}
}