use crate::model::report::Report; use tokio_rusqlite::{Connection, Row}; pub async fn support_foreign_keys(conn: &Connection) { let res = conn .call(move |conn| Ok(conn.pragma_update(None, "foreign_keys", "ON"))) .await; if let Err(err) = res { log::error!("Error supporting foreign keys: {err:?}"); } } pub fn format_key_for_search(value: &str) -> String { // Lower doesn’t work on accentuated letters, hence the need to remove manually accents for // uppercase letters as well. format!("replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(lower({}), 'à', 'a'), 'â', 'a'), 'ç', 'c'), 'è', 'e'), 'é', 'e'), 'ê', 'e'), 'ë', 'e'), 'î', 'i'), 'ï', 'i'), 'ô', 'o'), 'ù', 'u'), 'û', 'u'), 'ü', 'u'), 'À', 'A'), 'Â', 'A'), 'Ç', 'C'), 'È', 'E'), 'É', 'E'), 'Ê', 'E'), 'Ë', 'E'), 'Î', 'I'), 'Ï', 'I'), 'Ô', 'O'), 'Ù', 'U'), 'Û', 'U'), 'Ü', 'U')", value) } pub fn one>>( mut iter: I, ) -> Result { match iter.next() { Some(Ok(user)) => Ok(user), Some(Err(err)) => Err(tokio_rusqlite::Error::Rusqlite(err)), None => Err(tokio_rusqlite::Error::Rusqlite( rusqlite::Error::QueryReturnedNoRows, )), } } pub fn row_to_report(row: &Row) -> Result { Ok(Report { date: row.get(0)?, name: row.get(1)?, amount: row.get(2)?, action: row.get(3)?, }) }