pub use generic_client::GenericClient;
use tokio_postgres::{Error, Statement};
#[cfg(feature = "deadpool")]
mod deadpool;
mod generic_client;
pub trait Params<'a, P, O, C> {
fn params(&'a mut self, client: &'a C, params: &'a P) -> O;
}
#[doc(hidden)]
pub struct Stmt {
query: &'static str,
cached: Option<Statement>,
}
impl Stmt {
#[must_use]
pub fn new(query: &'static str) -> Self {
Self {
query,
cached: None,
}
}
pub async fn prepare<'a, C: GenericClient>(
&'a mut self,
client: &C,
) -> Result<&'a Statement, Error> {
if self.cached.is_none() {
let stmt = client.prepare(self.query).await?;
self.cached = Some(stmt);
}
Ok(unsafe { self.cached.as_ref().unwrap_unchecked() })
}
}