Added some return codes for later usage
Fixed a quoting bug
This commit is contained in:
@@ -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
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user