1use crate::entity::MongoEntity;
2use crate::repo::MongoRepo;
3use mongodb::{Client, Database};
4use std::error::Error;
5use std::sync::Arc;
6
7#[derive(Debug)]
8pub struct MongoInstance {
9 pub db: Arc<Database>,
10 pub client: Client,
11}
12
13impl MongoInstance {
14 pub async fn setup(uri: &str) -> Result<MongoInstance, Box<dyn Error + Send + Sync>> {
15 let client = Client::with_uri_str(uri).await?;
16
17 let db = client.default_database().unwrap();
18
19 Ok(MongoInstance {
20 db: Arc::new(db),
21 client,
22 })
23 }
24
25 pub async fn drop_database(&self) {
26 let db: &Database = self.db.as_ref();
27 db.drop().await.unwrap();
28 }
29
30 pub fn repo<T: MongoEntity>(&self, name: &str) -> MongoRepo<T> {
31 MongoRepo::new(self.db.clone().collection(name))
32 }
33}