rocket_auth/db/tokio_postgres/
mod.rs

1use 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}