rocket_auth/db/tokio_postgres/
mod.rs1use crate::prelude::*;
2mod sql;
3use std::convert::{TryFrom, TryInto};
4use tokio_postgres::Client;
5#[rocket::async_trait]
6impl DBConnection for Client {
7 async fn init(&self) -> Result<()> {
8 self.execute(sql::CREATE_TABLE, &[]).await?;
9 Ok(())
10 }
11 async fn create_user(&self, email: &str, hash: &str, is_admin: bool) -> Result<(), Error> {
12 self.execute(sql::INSERT_USER, &[&email, &hash, &is_admin])
13 .await?;
14 Ok(())
15 }
16 async fn update_user(&self, user: &User) -> Result<()> {
17 self.execute(
18 sql::UPDATE_USER,
19 &[&user.email, &user.password, &user.is_admin],
20 )
21 .await?;
22 Ok(())
23 }
24 async fn delete_user_by_id(&self, user_id: i32) -> Result<()> {
25 self.execute(sql::REMOVE_BY_ID, &[&user_id]).await?;
26 Ok(())
27 }
28 async fn delete_user_by_email(&self, email: &str) -> Result<()> {
29 self.execute(sql::REMOVE_BY_EMAIL, &[&email]).await?;
30 Ok(())
31 }
32 async fn get_user_by_id(&self, user_id: i32) -> Result<User> {
33 let user = self.query_one(sql::SELECT_BY_ID, &[&user_id]).await?;
34 user.try_into()
35 }
36
37 async fn get_user_by_email(&self, email: &str) -> Result<User> {
38 let user = self.query_one(sql::SELECT_BY_EMAIL, &[&email]).await?;
39 user.try_into()
40 }
41}
42
43impl TryFrom<tokio_postgres::Row> for User {
44 type Error = Error;
45 fn try_from(row: tokio_postgres::Row) -> Result<User> {
46 Ok(User {
47 id: row.get(0),
48 email: row.get(1),
49 password: row.get(2),
50 is_admin: row.get(3),
51 })
52 }
53}