use anyhow::{Context, Result}; use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; use schist_models::drip::Drip; use schist_schema::schema::drips::dsl::drips as drips_table; pub fn delete_all_drips(connection: &mut SqliteConnection) -> Result { let num_rows_deleted = diesel::delete(drips_table) .execute(connection) .with_context(|| "failed to delete all drips")?; Ok(num_rows_deleted) } pub fn get_all_drips(connection: &mut SqliteConnection) -> Result> { let all_drips = drips_table .select(Drip::as_select()) .load(connection) .with_context(|| "failed to get all drips")?; Ok(all_drips) } pub fn insert_drips(drips: &[Drip], connection: &mut SqliteConnection) -> Result { let num_drips_inserted = diesel::insert_into(drips_table) .values(drips) .execute(connection) .with_context(|| insert_err_msg(drips))?; Ok(num_drips_inserted) } fn insert_err_msg(drips: &[Drip]) -> String { format!( "failed to insert drips: [{}]", drips .iter() .map(|a| a.id.to_string()) .collect::>() .join(", ") ) }