use journal::{journal::JournalType, types::CustomUnit}; use super::{load_journal_and_export_data, PsychonautImportGlobalArgs}; pub fn create_or_update_custom_unit(journal: &mut JournalType, unit: CustomUnit) { match journal.get_custom_unit(unit.id) { Some(custom_unit) => { println!( "Updating Custom Unit ID: {} Name: {}", unit.id, custom_unit.name ); journal.update_custom_unit(unit.id, unit, false); } None => { println!("Creating Custom Unit ID: {} Name: {}", unit.id, unit.name); journal.update_custom_unit(unit.id, unit, true); } } } #[derive(Debug, Clone, clap::Args)] #[group(args = vec!["id", "name"], required = true, multiple = false)] pub struct PsychonautImportCustomUnitArgs { #[command(flatten)] pub import_global_args: PsychonautImportGlobalArgs, #[arg(long)] pub id: Option<i32>, #[arg(long)] pub name: Option<String>, } pub fn psychonaut_import_custom_unit( args: &PsychonautImportCustomUnitArgs, ) -> Result<(), Box<dyn std::error::Error>> { let (mut journal, export_data) = load_journal_and_export_data(&args.import_global_args)?; match (&args.id, &args.name) { (Some(id), _) => { let unit = export_data .custom_units .into_iter() .find(|unit| unit.id == *id); match unit { Some(unit) => { create_or_update_custom_unit(&mut journal, CustomUnit::from(unit)); } None => { panic!("Could not find custom unit with ID: {id}") } } } (_, Some(name)) => { let unit = export_data .custom_units .into_iter() .find(|unit| unit.name == *name); match unit { Some(unit) => { create_or_update_custom_unit(&mut journal, CustomUnit::from(unit)); } None => { panic!("Could not find custom unit with name: {name}") } } } _ => unreachable!(), } journal.save()?; Ok(()) }