data_goes 0.1.0-alpha.2.95

Biblioteca experimental para demonstração.
Documentation
use tokio::sync::Mutex;
pub use crate::config::ConfigClient;
use crate::client_builder::ClientBuilder;
use mssql_client::{Client, Config, Ready};
use anyhow::{Ok, Result};

pub enum DbClient {
    SqlServer(mssql_client::Client<Ready>),
    MySql(mysql_async::Conn)
}
pub struct ClientSql{   
    client:Mutex<DbClient>,
}


impl ClientSql {
    pub async fn new<'a>(cfg: &ConfigClient<'a>)->Result<Self>{
        let conn_mssql =format!("Server={};User Id={};Password={};TrustServerCertificate=true", cfg.host, cfg.user, cfg.password);
        if let std::result::Result::Ok(config) = Config::from_connection_string(&conn_mssql){
            if let std::result::Result::Ok(client) = mssql_client::Client::connect(config).await{
                return Ok(Self{client: Mutex::new(DbClient::SqlServer(client)),});
            }
        }
        let conn_mysql=format!("mysql://{}:{}@{}:3306", cfg.user, cfg.password, cfg.host);
        if let std::result::Result::Ok(opts)= mysql_async::Opts::from_url(&conn_mysql){
            if let std::result::Result::Ok(client)=mysql_async::Conn::new(opts).await{
                return  Ok(Self { client: Mutex::new(DbClient::MySql(client)),});
            }
        }
        anyhow::bail!("Erro de autentificação")
    }
    pub fn builder<'a>() -> ClientBuilder<'a> {
        ClientBuilder::new()
    }
}