use crate::{
ConnectParams, Connection, ConnectionConfiguration, HdbError, HdbResult, IntoConnectParams,
};
use rocket_db_pools::{Pool, figment::Figment};
#[derive(Debug, Clone)]
pub struct HanaPoolForRocket {
connect_params: ConnectParams,
connect_config: ConnectionConfiguration,
}
impl HanaPoolForRocket {
pub fn new<P: IntoConnectParams>(p: P) -> HdbResult<Self> {
Ok(Self {
connect_params: p.into_connect_params()?,
connect_config: ConnectionConfiguration::default(),
})
}
pub fn with_configuration<P: IntoConnectParams>(
p: P,
c: ConnectionConfiguration,
) -> HdbResult<Self> {
Ok(Self {
connect_params: p.into_connect_params()?,
connect_config: c,
})
}
}
#[rocket::async_trait]
impl Pool for HanaPoolForRocket {
type Connection = Connection;
type Error = HdbError;
async fn init(figment: &Figment) -> HdbResult<Self> {
let connect_params =
figment
.extract::<ConnectParams>()
.map_err(|e| HdbError::ConnParams {
source: Box::new(e),
})?;
let connect_config = figment.extract::<ConnectionConfiguration>().map_err(|_| {
HdbError::Usage(std::borrow::Cow::from("Incorrect ConnectionConfiguration"))
})?;
let pool = Self {
connect_params,
connect_config,
};
pool.get().await.map(|_| pool)
}
async fn get(&self) -> HdbResult<Connection> {
Connection::with_configuration(&self.connect_params, &self.connect_config).await
}
async fn close(&self) {}
}