From e966a22707e8140f49ab8575fcae4566afb8f9fc Mon Sep 17 00:00:00 2001 From: Arthur Roberts Date: Wed, 20 Aug 2025 21:35:53 +0100 Subject: [PATCH] Added some return codes for later usage Fixed a quoting bug --- scryfall_deser/scripts/search_with_rofi.sh | 2 +- scryfall_deser/src/main.rs | 56 ++++++++++++++++------ 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/scryfall_deser/scripts/search_with_rofi.sh b/scryfall_deser/scripts/search_with_rofi.sh index d545328..bb2a7a3 100755 --- a/scryfall_deser/scripts/search_with_rofi.sh +++ b/scryfall_deser/scripts/search_with_rofi.sh @@ -3,7 +3,7 @@ CARDS=$(/home/arthurr/code/mini_projects/scryfall_deser/target/debug/scryfall_deser $@) SELECTION=$(rofi -dmenu << EOF -"$CARDS" +$CARDS EOF ) diff --git a/scryfall_deser/src/main.rs b/scryfall_deser/src/main.rs index 4a2f476..4e021c9 100644 --- a/scryfall_deser/src/main.rs +++ b/scryfall_deser/src/main.rs @@ -1,13 +1,31 @@ use clap::Parser; use scryfall_deser::find_matching_cards; -use scryfall_deser::get_all_lowercase_card_names; use scryfall_deser::get_card_by_name; use scryfall_deser::get_local_cache_folder; use scryfall_deser::init_db; use scryfall_deser::update_db_with_file; use scryfall_deser::GetNameType; +use std::process::ExitCode; +use std::process::Termination; use textdistance::str::damerau_levenshtein; +impl Termination for MtgCardExit { + fn report(self) -> ExitCode { + match self { + MtgCardExit::Success => ExitCode::SUCCESS, + MtgCardExit::EmptySearchString => ExitCode::from(101), + MtgCardExit::NoExactMatchCard => ExitCode::from(102), + } + } +} + +enum MtgCardExit { + // No error... unsure it should be in this enum + Success, + EmptySearchString, + NoExactMatchCard, +} + #[derive(Parser, Debug)] #[command(version, about, long_about = None)] struct Args { @@ -21,16 +39,22 @@ struct Args { search_text: Vec, } -fn exact_search(search_strings: Vec) { +fn exact_search(search_strings: Vec) -> MtgCardExit { let search_string = search_strings.join(" "); let card = get_card_by_name(&search_string, GetNameType::Name); - if card.is_none() { - panic!("No card found with exact name of {}", search_string); + match card { + None => { + println!("No card found with exact name of {}", search_string); + MtgCardExit::NoExactMatchCard + } + Some(c) => { + println!("{}", c); + MtgCardExit::Success + } } - println!("{}", card.unwrap()); } -fn main() { +fn main() -> MtgCardExit { let args = Args::parse(); if args.update { init_db(); @@ -38,15 +62,16 @@ fn main() { // TODO - actually download the file - probably do away with TempFile stuff path.push("oracle-cards-20250814210711.json"); update_db_with_file(path); - return; + return MtgCardExit::Success; } if args.search_text.is_empty() { - panic!("You need to put some card text to search"); + println!("You need to put some card text to search"); + return MtgCardExit::EmptySearchString; } if args.exact { - exact_search(args.search_text); - return; + let res = exact_search(args.search_text); + return res; } let mut search_string = String::new(); @@ -57,15 +82,17 @@ fn main() { search_string.pop(); let matching_cards = find_matching_cards(&search_string); - dbg!(&matching_cards); + //dbg!(&matching_cards); if matching_cards.is_empty() { // Do some distance checking stuff } else if matching_cards.len() == 1 { - let card = get_card_by_name(&matching_cards[0].name, GetNameType::LowercaseName); - dbg!(card); + let card = get_card_by_name(&matching_cards[0].name, GetNameType::LowercaseName).unwrap(); + println!("{}", card); + return MtgCardExit::Success; } else { for card in matching_cards { + dbg!(&card); println!( "{}", get_card_by_name(&card.lowercase_name, GetNameType::LowercaseName) @@ -73,8 +100,9 @@ fn main() { .name ); } - // This will be the harder part I think + return MtgCardExit::Success; } + unreachable!("Don't know how you got here - there's a real bug with this"); /* For testing - all seemed to work alright let card = get_card_by_name("Black Lotus", GetNameType::Name);