use diesel::r2d2; use diesel::prelude::*; use diesel::pg::PgConnection; use crate::models::*; type ConnectionPool = r2d2::Pool>; pub trait DataAccess { fn get_user_by_id(&self, id: u32) -> Option { unimplemented!(); } fn get_user_by_name(&self, username: String) -> Option { unimplemented!(); } } #[derive(Clone)] pub struct DBAccess { connection_pool: ConnectionPool, } impl DBAccess { pub fn new(pool: ConnectionPool) -> DBAccess { DBAccess { connection_pool: pool, } } } impl DataAccess for DBAccess { fn get_user_by_name(&self, name: String) -> Option { use elseware::schema::user_accounts::dsl::{user_accounts, username}; self.connection_pool.get() .map(|conn| { user_accounts.filter(username.eq(name)).load::(&conn) .map(|mut user| user.pop()).unwrap_or(None) }) .unwrap_or(None) } } /*impl DataAccess for DatabaseAccess { }*/