X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fdb_schema%2Fsrc%2Fimpls%2Flanguage.rs;h=53aadbac80d3b1d75e2ea5f8b2c4a7d02eeb8c0f;hb=92568956353f21649ed9aff68b42699c9d036f30;hp=a56c26d7de469f6cf113afa300ac6e3690aa11c2;hpb=2ef0f8f5f8c60d8c7632779ca16bac69daab1266;p=lemmy.git diff --git a/crates/db_schema/src/impls/language.rs b/crates/db_schema/src/impls/language.rs index a56c26d7..53aadbac 100644 --- a/crates/db_schema/src/impls/language.rs +++ b/crates/db_schema/src/impls/language.rs @@ -1,28 +1,39 @@ -use crate::{diesel::ExpressionMethods, newtypes::LanguageId, source::language::Language}; -use diesel::{result::Error, PgConnection, QueryDsl, 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) } @@ -31,15 +42,19 @@ impl Language { #[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);