use anyhow::{Context, Result}; use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; use schist_models::Account; use schist_schema::schema::accounts::dsl::accounts as accounts_table; pub fn delete_all_accounts(connection: &mut SqliteConnection) -> Result { let num_rows_deleted = diesel::delete(accounts_table) .execute(connection) .with_context(|| "failed to delete all accounts")?; Ok(num_rows_deleted) } pub fn get_all_accounts(connection: &mut SqliteConnection) -> Result> { let all_accounts = accounts_table .select(Account::as_select()) .load(connection) .with_context(|| "failed to get all accounts")?; Ok(all_accounts) } pub fn insert_accounts(accounts: &[Account], connection: &mut SqliteConnection) -> Result { let num_accounts_inserted = diesel::insert_into(accounts_table) .values(accounts) .execute(connection) .with_context(|| insert_err_msg(accounts))?; Ok(num_accounts_inserted) } fn insert_err_msg(accounts: &[Account]) -> String { format!( "failed to insert accounts: [{}]", accounts .iter() .map(|a| format!("\"{}\": \"{}\"", a.id, a.name)) .collect::>() .join(", ") ) }