for some cases where we have multiple card entries, find the first one with an image url (since some of them don't have image urls for whatever reason)

This commit is contained in:
Adrian Malacoda 2017-03-12 16:25:57 -05:00
parent 725cceb955
commit 3b592365a7

View File

@ -60,22 +60,26 @@ impl MtgSearcher {
fn parse_entry (page: String) -> Result<MtgCard, Error> { fn parse_entry (page: String) -> Result<MtgCard, Error> {
let parsed: Value = serde_json::from_str(&page)?; let parsed: Value = serde_json::from_str(&page)?;
let ref parsed_entry = parsed["cards"][0]; for entry in parsed["cards"].as_array().unwrap_or(&vec![]) {
if let Some(_) = parsed_entry.as_object() { if entry["imageUrl"].as_str().is_some() {
Result::Ok(MtgCard { let card_name = entry["name"].as_str().map(String::from).expect("expected name in json data");
name: parsed_entry["name"].as_str().map(String::from).expect("expected name in json data"), let card_url = format!("http://magiccards.info/query?q=!{}", card_name);
cost: parsed_entry["manaCost"].as_str().map(String::from).expect("expected cost in json data"),
typeline: parsed_entry["type"].as_str().map(String::from).expect("expected type in json data"), return Result::Ok(MtgCard {
rules: parsed_entry["text"].as_str().map(String::from).expect("expected text in json data"), name: card_name,
flavor: parsed_entry["flavor"].as_str().map(String::from), cost: entry["manaCost"].as_str().map(String::from).expect("expected cost in json data"),
power: parsed_entry["power"].as_str().map(String::from), typeline: entry["type"].as_str().map(String::from).expect("expected type in json data"),
toughness: parsed_entry["toughness"].as_str().map(String::from), rules: entry["text"].as_str().map(String::from).expect("expected text in json data"),
url: parsed_entry["imageUrl"].as_str().map(String::from).expect("expected image url in json data"), flavor: entry["flavor"].as_str().map(String::from),
image_url: parsed_entry["imageUrl"].as_str().map(String::from).expect("expected image url in json data") power: entry["power"].as_str().map(String::from),
}) toughness: entry["toughness"].as_str().map(String::from),
} else { url: card_url,
Result::Err(Error::Other(String::from("No card info found"))) image_url: entry["imageUrl"].as_str().map(String::from).expect("expected image url in json data")
});
}
} }
Result::Err(Error::Other(String::from("No card info found")))
} }
impl Searcher<MtgCard> for MtgSearcher { impl Searcher<MtgCard> for MtgSearcher {