use actualbudget_to_schist_transformer::{ actualbudget_state::read_actualbudget_state, schist_state::SchistState, transform_state::transform_state, }; use anyhow::anyhow; use diesel::{Connection, SqliteConnection}; pub fn import_from_actualbudget_dialog( ) -> Option> { let path = rfd::FileDialog::new() .add_filter("SQLite database", &["sqlite"]) .set_title("Import Actualbudget database") .pick_file(); path.as_ref() .map(|path| import_from_actualbudget(path).map_err(|err| (path.clone(), err))) } fn import_from_actualbudget(path: &std::path::PathBuf) -> anyhow::Result { let path = path .to_str() .ok_or_else(|| anyhow!("Failed to stringify path: {:?}", path))?; SqliteConnection::establish(path) .map(|mut conn| read_actualbudget_state(&mut conn))? .map(transform_state)? }