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:
parent
725cceb955
commit
3b592365a7
@ -60,24 +60,28 @@ 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 {
|
||||||
fn exact_search (&self, name: &str) -> Option<MtgCard> {
|
fn exact_search (&self, name: &str) -> Option<MtgCard> {
|
||||||
let search = format!(r#""{}""#, name);
|
let search = format!(r#""{}""#, name);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user