X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fdb_schema%2Fsrc%2Fimpls%2Flanguage.rs;h=53aadbac80d3b1d75e2ea5f8b2c4a7d02eeb8c0f;hb=92568956353f21649ed9aff68b42699c9d036f30;hp=0aef28f207dce535e823524163f9cbc754c8c31f;hpb=c9f140742925d6da20103124b49f2b58a35fc2b8;p=lemmy.git diff --git a/crates/db_schema/src/impls/language.rs b/crates/db_schema/src/impls/language.rs index 0aef28f2..53aadbac 100644 --- a/crates/db_schema/src/impls/language.rs +++ b/crates/db_schema/src/impls/language.rs @@ -1,50 +1,60 @@ -use crate::{newtypes::LanguageId, source::language::Language}; -use diesel::{result::Error, PgConnection, RunQueryDsl, *}; +use crate::{ + diesel::ExpressionMethods, + newtypes::LanguageId, + schema::language::dsl::{code, id, language}, + source::language::Language, + utils::{get_conn, DbPool}, +}; +use diesel::{result::Error, QueryDsl}; +use diesel_async::RunQueryDsl; impl Language { - pub fn read_all(conn: &mut PgConnection) -> Result, Error> { - use crate::schema::language::dsl::*; - language.load::(conn) + pub async fn read_all(pool: &mut DbPool<'_>) -> Result, Error> { + let conn = &mut get_conn(pool).await?; + language.load::(conn).await } - pub fn read_from_id(conn: &mut PgConnection, id_: LanguageId) -> Result { - use crate::schema::language::dsl::*; - language.filter(id.eq(id_)).first::(conn) + pub async fn read_from_id(pool: &mut DbPool<'_>, id_: LanguageId) -> Result { + let conn = &mut get_conn(pool).await?; + language.filter(id.eq(id_)).first::(conn).await } - pub fn read_id_from_code(conn: &mut PgConnection, code_: &str) -> Result { - use crate::schema::language::dsl::*; - Ok(language.filter(code.eq(code_)).first::(conn)?.id) - } - - pub fn read_id_from_code_opt( - conn: &mut PgConnection, + /// Attempts to find the given language code and return its ID. If not found, returns none. + pub async fn read_id_from_code( + pool: &mut DbPool<'_>, code_: Option<&str>, ) -> Result, Error> { if let Some(code_) = code_ { - Ok(Some(Language::read_id_from_code(conn, code_)?)) + let conn = &mut get_conn(pool).await?; + Ok( + language + .filter(code.eq(code_)) + .first::(conn) + .await + .map(|l| l.id) + .ok(), + ) } else { Ok(None) } } - - pub fn read_undetermined(conn: &mut PgConnection) -> Result { - use crate::schema::language::dsl::*; - Ok(language.filter(code.eq("und")).first::(conn)?.id) - } } #[cfg(test)] mod tests { - use crate::{source::language::Language, utils::establish_unpooled_connection}; + #![allow(clippy::unwrap_used)] + #![allow(clippy::indexing_slicing)] + + use crate::{source::language::Language, utils::build_db_pool_for_tests}; use serial_test::serial; - #[test] + #[tokio::test] #[serial] - fn test_languages() { - let conn = &mut establish_unpooled_connection(); + async fn test_languages() { + let pool = &build_db_pool_for_tests().await; + let pool = &mut pool.into(); - let all = Language::read_all(conn).unwrap(); + let all = Language::read_all(pool).await.unwrap(); assert_eq!(184, all.len()); assert_eq!("ak", all[5].code);