use super::schema::users::{self, dsl::*}; use diesel::dsl::Eq; use diesel::dsl::{AsSelect, Select}; use diesel::expression::AsExpression; use diesel::helper_types::Filter; use diesel::prelude::*; use diesel::sql_types::BigInt; use diesel::sqlite::Sqlite; use diesel::sqlite::SqliteConnection; #[derive(Queryable, Selectable)] #[diesel(table_name = users)] pub struct User { pub id: i32, pub discord_id: i64, pub guild_id: i64, pub email: String, pub first_name: String, pub last_name: String, } #[derive(Insertable)] #[diesel(table_name = users)] pub struct NewUser { pub discord_id: i64, pub guild_id: i64, pub email: String, pub first_name: String, pub last_name: String, } type All = Select>; type WithGuild = Eq; type ByGuild = Filter>; impl User { pub fn all() -> All { users::table.select(User::as_select()) } // pub fn by_guild(guild_id_: T) -> ByGuild // where T: AsExpression // { // Self::all().filter(guild_id.eq(guild_id_)) // } pub fn by_guild_id(guild_id_: i64) -> ByGuild { Self::all().filter(guild_id.eq(guild_id_)) } pub fn get( conn: &mut SqliteConnection, guild_id_: i64, discord_id_: i64, ) -> Result { Self::all() .filter(guild_id.eq(guild_id_)) .filter(discord_id.eq(discord_id_)) .first(conn) } pub fn get_by_id(conn: &mut SqliteConnection, id_: i32) -> Result { Self::all().filter(id.eq(id_)).first(conn) } } impl NewUser { pub fn insert(&self, conn: &mut SqliteConnection) -> User { diesel::insert_into(users::table) .values(self) .get_result(conn) .expect("fuck") } }