Expand description
Database module
§Axum
If you wan’t to use axum the best way is to make a small wrapper around ConnOwned.
ⓘ
use chuchi_postgres as pg;
use pg::db::{Conn, Trans, Db};
use axum::extract::{FromRequestParts, FromRef};
use axum::http::request::Parts;
pub struct ConnOwned(pub pg::db::ConnOwned);
impl ConnOwned {
pub fn conn(&self) -> Conn {
self.0.conn()
}
pub async fn trans(&mut self) -> Result<Trans, pg::Error> {
self.0.trans().await
}
}
impl<S> FromRequestParts<S> for ConnOwned
where
S: Send + Sync,
Db: FromRef<S>,
{
type Rejection = MyError;
async fn from_request_parts(
_parts: &mut Parts,
state: &S,
) -> Result<Self, Self::Rejection> {
let db = Db::from_ref(state);
db.get()
.await
.map(Self)
.map_err(|e| MyError::Internal(e.to_string()))
}
}