mongo_orm/
instance.rs

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}