spark_orm/
client.rs

1use std::sync::Arc;
2use mongodb::{Client, Database};
3use once_cell::sync::OnceCell;
4
5use crate::connection::{create_client, create_client_options};
6use crate::error::Error;
7
8pub type Result<T> = std::result::Result<T, Error>;
9
10pub(crate) static R_M_ORM_STATIC: OnceCell<Spark> = OnceCell::new();
11
12#[derive(Debug)]
13pub struct Spark {
14    #[allow(dead_code)]
15    client: Client,
16    db: Arc<Database>,
17}
18
19impl Spark {
20    pub async fn global_connect(
21        user_name: &str,
22        password: &str,
23        host: &str,
24        port: &str,
25        db_name: &str,
26    ) -> Arc<Database> {
27        Self::init_logger();
28        let client_options = create_client_options(user_name, password, host, port)
29            .await
30            .unwrap();
31        let client = create_client(client_options).unwrap();
32        // client
33        //     .database("user")
34        //     .run_command(doc! {"ping": 1}, None)
35        //     .await?;
36        let db = client.database(db_name);
37        let rs = Spark {
38            client,
39            db: Arc::new(db),
40        };
41        R_M_ORM_STATIC.set(rs).unwrap();
42        Self::get_db()
43    }
44
45    pub async fn connect(
46        user_name: &str,
47        password: &str,
48        host: &str,
49        port: &str,
50        db_name: &str,
51    ) -> Database {
52        Self::init_logger();
53        let client_options = create_client_options(user_name, password, host, port)
54            .await
55            .unwrap();
56        let client = create_client(client_options).unwrap();
57        client.database(db_name)
58    }
59    pub fn get_db() -> Arc<Database> {
60        let spark = R_M_ORM_STATIC.get();
61        match spark {
62            Some(rs) => rs.db.clone(),
63            None => panic!("The Data base not set !!!"),
64        }
65    }
66
67    pub fn from_mongo_result<T>(re: mongodb::error::Result<T>) -> Result<T> {
68        match re {
69            Ok(inner_re) => Ok(inner_re),
70            Err(error) => Err(Error::new(&error.to_string())),
71        }
72    }
73
74    pub fn use_db(){
75        
76    }
77    fn init_logger() {
78        env_logger::init();
79    }
80}