Added some return codes for later usage

Fixed a quoting bug
This commit is contained in:
2025-08-20 21:35:53 +01:00
parent 3f7cd6353a
commit e966a22707
2 changed files with 43 additions and 15 deletions

View File

@@ -3,7 +3,7 @@
CARDS=$(/home/arthurr/code/mini_projects/scryfall_deser/target/debug/scryfall_deser $@) CARDS=$(/home/arthurr/code/mini_projects/scryfall_deser/target/debug/scryfall_deser $@)
SELECTION=$(rofi -dmenu << EOF SELECTION=$(rofi -dmenu << EOF
"$CARDS" $CARDS
EOF EOF
) )

View File

@@ -1,13 +1,31 @@
use clap::Parser; use clap::Parser;
use scryfall_deser::find_matching_cards; 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_card_by_name;
use scryfall_deser::get_local_cache_folder; use scryfall_deser::get_local_cache_folder;
use scryfall_deser::init_db; use scryfall_deser::init_db;
use scryfall_deser::update_db_with_file; use scryfall_deser::update_db_with_file;
use scryfall_deser::GetNameType; use scryfall_deser::GetNameType;
use std::process::ExitCode;
use std::process::Termination;
use textdistance::str::damerau_levenshtein; 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)] #[derive(Parser, Debug)]
#[command(version, about, long_about = None)] #[command(version, about, long_about = None)]
struct Args { struct Args {
@@ -21,16 +39,22 @@ struct Args {
search_text: Vec<String>, search_text: Vec<String>,
} }
fn exact_search(search_strings: Vec<String>) { fn exact_search(search_strings: Vec<String>) -> MtgCardExit {
let search_string = search_strings.join(" "); let search_string = search_strings.join(" ");
let card = get_card_by_name(&search_string, GetNameType::Name); let card = get_card_by_name(&search_string, GetNameType::Name);
if card.is_none() { match card {
panic!("No card found with exact name of {}", search_string); 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(); let args = Args::parse();
if args.update { if args.update {
init_db(); init_db();
@@ -38,15 +62,16 @@ fn main() {
// TODO - actually download the file - probably do away with TempFile stuff // TODO - actually download the file - probably do away with TempFile stuff
path.push("oracle-cards-20250814210711.json"); path.push("oracle-cards-20250814210711.json");
update_db_with_file(path); update_db_with_file(path);
return; return MtgCardExit::Success;
} }
if args.search_text.is_empty() { 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 { if args.exact {
exact_search(args.search_text); let res = exact_search(args.search_text);
return; return res;
} }
let mut search_string = String::new(); let mut search_string = String::new();
@@ -57,15 +82,17 @@ fn main() {
search_string.pop(); search_string.pop();
let matching_cards = find_matching_cards(&search_string); let matching_cards = find_matching_cards(&search_string);
dbg!(&matching_cards); //dbg!(&matching_cards);
if matching_cards.is_empty() { if matching_cards.is_empty() {
// Do some distance checking stuff // Do some distance checking stuff
} else if matching_cards.len() == 1 { } else if matching_cards.len() == 1 {
let card = get_card_by_name(&matching_cards[0].name, GetNameType::LowercaseName); let card = get_card_by_name(&matching_cards[0].name, GetNameType::LowercaseName).unwrap();
dbg!(card); println!("{}", card);
return MtgCardExit::Success;
} else { } else {
for card in matching_cards { for card in matching_cards {
dbg!(&card);
println!( println!(
"{}", "{}",
get_card_by_name(&card.lowercase_name, GetNameType::LowercaseName) get_card_by_name(&card.lowercase_name, GetNameType::LowercaseName)
@@ -73,8 +100,9 @@ fn main() {
.name .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 /* For testing - all seemed to work alright
let card = get_card_by_name("Black Lotus", GetNameType::Name); let card = get_card_by_name("Black Lotus", GetNameType::Name);