From 3b592365a788ab85b3f73ec4453b07ea25c02d05 Mon Sep 17 00:00:00 2001 From: Adrian Malacoda Date: Sun, 12 Mar 2017 16:25:57 -0500 Subject: [PATCH] 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) --- src/searchers/mtg.rs | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/searchers/mtg.rs b/src/searchers/mtg.rs index e91c699..9aedace 100644 --- a/src/searchers/mtg.rs +++ b/src/searchers/mtg.rs @@ -60,22 +60,26 @@ impl MtgSearcher { fn parse_entry (page: String) -> Result { let parsed: Value = serde_json::from_str(&page)?; - let ref parsed_entry = parsed["cards"][0]; - if let Some(_) = parsed_entry.as_object() { - Result::Ok(MtgCard { - name: parsed_entry["name"].as_str().map(String::from).expect("expected name in json data"), - 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"), - rules: parsed_entry["text"].as_str().map(String::from).expect("expected text in json data"), - flavor: parsed_entry["flavor"].as_str().map(String::from), - power: parsed_entry["power"].as_str().map(String::from), - toughness: parsed_entry["toughness"].as_str().map(String::from), - url: parsed_entry["imageUrl"].as_str().map(String::from).expect("expected image url in json data"), - image_url: parsed_entry["imageUrl"].as_str().map(String::from).expect("expected image url in json data") - }) - } else { - Result::Err(Error::Other(String::from("No card info found"))) + for entry in parsed["cards"].as_array().unwrap_or(&vec![]) { + if entry["imageUrl"].as_str().is_some() { + let card_name = entry["name"].as_str().map(String::from).expect("expected name in json data"); + let card_url = format!("http://magiccards.info/query?q=!{}", card_name); + + return Result::Ok(MtgCard { + name: card_name, + cost: entry["manaCost"].as_str().map(String::from).expect("expected cost in json data"), + typeline: entry["type"].as_str().map(String::from).expect("expected type in json data"), + rules: entry["text"].as_str().map(String::from).expect("expected text in json data"), + flavor: entry["flavor"].as_str().map(String::from), + power: entry["power"].as_str().map(String::from), + toughness: entry["toughness"].as_str().map(String::from), + url: card_url, + 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 for MtgSearcher {