Added searching by lower or card name

Also added help strings
This commit is contained in:
2025-08-19 22:02:18 +01:00
parent 9f03e3e11f
commit 98af8885a6
3 changed files with 50 additions and 21 deletions

View File

@@ -1,4 +1,5 @@
use rusqlite;
use std::fmt;
use std::fs;
use std::path::PathBuf;
use std::str::SplitWhitespace;
@@ -88,18 +89,28 @@ pub struct DbCard {
pub scryfall_uri: String,
}
pub fn get_card_by_name(name: &str) -> DbCard {
pub enum GetNameType {
Name,
LowercaseName,
}
pub fn get_card_by_name(name: &str, name_type: GetNameType) -> Option<DbCard> {
let sqlite_file = get_local_data_sqlite_file();
let conn = rusqlite::Connection::open(sqlite_file).unwrap();
let mut stmt = conn
.prepare(
let sql = match name_type {
GetNameType::Name => {
"SELECT name, type_line, oracle_text, power_toughness, loyalty, mana_cost, scryfall_uri
FROM cards WHERE name = (?1)",
)
.unwrap();
FROM cards WHERE name = (?1)"
}
GetNameType::LowercaseName => {
"SELECT name, type_line, oracle_text, power_toughness, loyalty, mana_cost, scryfall_uri
FROM cards WHERE lowercase_name = (?1)"
}
};
let mut stmt = conn.prepare(sql).unwrap();
let mut rows = stmt.query([name]).unwrap();
let card = match rows.next().unwrap() {
Some(row) => DbCard {
match rows.next().unwrap() {
Some(row) => Some(DbCard {
name: row.get(0).unwrap(),
type_line: row.get(1).unwrap(),
oracle_text: row.get(2).unwrap(),
@@ -107,12 +118,9 @@ pub fn get_card_by_name(name: &str) -> DbCard {
loyalty: row.get(4).unwrap(),
mana_cost: row.get(5).unwrap(),
scryfall_uri: row.get(6).unwrap(),
},
None => {
panic!("{} isn't a card that exists", name);
}
};
card
}),
None => None,
}
}
const CREATE_CARDS_TABLE_SQL: &str = "