optimize database initializing
parent
94d05155fb
commit
df19464626
|
@ -1,20 +1,19 @@
|
|||
use mysql::{Pool, PooledConn, Opts};
|
||||
use sprintf::sprintf;
|
||||
use std::{env, path::PathBuf};
|
||||
use mysql::{Opts, Pool, PooledConn};
|
||||
use std::{
|
||||
env,
|
||||
path::PathBuf,
|
||||
sync::{Arc, Mutex},
|
||||
};
|
||||
|
||||
use directories::BaseDirs;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Db {
|
||||
location: String,
|
||||
user: String,
|
||||
port: String,
|
||||
password: String,
|
||||
db_name: String,
|
||||
pool: Arc<Mutex<Pool>>,
|
||||
}
|
||||
|
||||
impl Db {
|
||||
pub fn initialize(env: String) -> Self {
|
||||
pub fn initialize(env: String) -> Result<Self, mysql::Error> {
|
||||
let base_dir: BaseDirs = match BaseDirs::new() {
|
||||
Some(dirs) => dirs,
|
||||
None => panic!("No config folder found."),
|
||||
|
@ -27,31 +26,26 @@ impl Db {
|
|||
Err(_) => panic!("Could not load .env file {:?}", config_file_path.as_path()),
|
||||
};
|
||||
|
||||
Db {
|
||||
location: env::var("LOCATION").unwrap_or_else(|_| "localhost".to_string()),
|
||||
user: env::var("USERNAME").unwrap(),
|
||||
port: env::var("PORT").unwrap_or_else(|_| "3306".to_string()),
|
||||
password: env::var("PASSWORD").unwrap(),
|
||||
db_name: env::var("DB").unwrap_or_else(|_| "efulfilment".to_string()),
|
||||
}
|
||||
let location: String = env::var("LOCATION").unwrap_or_else(|_| "localhost".to_string());
|
||||
let user: String = env::var("USERNAME").unwrap();
|
||||
let port: String = env::var("PORT").unwrap_or_else(|_| "3306".to_string());
|
||||
let password: String = env::var("PASSWORD").unwrap();
|
||||
let db_name: String = env::var("DB").unwrap_or_else(|_| "efulfilment".to_string());
|
||||
let url: String = format!(
|
||||
"mysql://{}:{}@{}:{}/{}",
|
||||
user, password, location, port, db_name
|
||||
);
|
||||
|
||||
let pool: Pool = Pool::new(Opts::from_url(&url)?)?;
|
||||
let database: Db = Self {
|
||||
pool: Arc::new(Mutex::new(pool)),
|
||||
};
|
||||
|
||||
Ok(database)
|
||||
}
|
||||
|
||||
pub fn get_connection(&self) -> Result<PooledConn, mysql::Error> {
|
||||
let url = sprintf!(
|
||||
"mysql://%s:%s@%s:%s/%s",
|
||||
self.user,
|
||||
self.password,
|
||||
self.location,
|
||||
self.port,
|
||||
self.db_name
|
||||
).unwrap();
|
||||
|
||||
let pool = match Pool::new(Opts::from_url(&url).unwrap()) {
|
||||
Ok(p) => p,
|
||||
Err(e) => return Err(e),
|
||||
};
|
||||
let conn: Result<PooledConn, mysql::Error> = pool.get_conn() ;
|
||||
|
||||
conn
|
||||
let pool = self.pool.lock().unwrap();
|
||||
pool.get_conn()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ pub mod service;
|
|||
fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
|
||||
let args: Cli = Cli::parse();
|
||||
let env: &String = &Cli::parse().env.unwrap_or("local".to_string());
|
||||
let db: Db = Db::initialize(env.to_string());
|
||||
let db: Db = Db::initialize(env.to_string())?;
|
||||
let conn_res: Result<PooledConn, mysql::Error> = db.get_connection();
|
||||
|
||||
match conn_res {
|
||||
|
|
Loading…
Reference in New Issue