use mopa crate to implement downcastng
This commit is contained in:
parent
ff48a0501f
commit
552287bc94
@ -17,3 +17,4 @@ select = "0.3.0"
|
|||||||
hyper = "0.9.18"
|
hyper = "0.9.18"
|
||||||
serde_json = "0.9"
|
serde_json = "0.9"
|
||||||
retry = { git = "https://github.com/jimmycuadra/retry", rev = "3fa812e650d64ede61ea243fb83ef1a222ff0f84" }
|
retry = { git = "https://github.com/jimmycuadra/retry", rev = "3fa812e650d64ede61ea243fb83ef1a222ff0f84" }
|
||||||
|
mopa = "0.2.2"
|
||||||
|
@ -3,9 +3,13 @@ extern crate select;
|
|||||||
extern crate serde_json;
|
extern crate serde_json;
|
||||||
extern crate retry;
|
extern crate retry;
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
extern crate mopa;
|
||||||
|
|
||||||
pub mod searchers;
|
pub mod searchers;
|
||||||
|
|
||||||
use std::any::Any;
|
//use std::any::Any;
|
||||||
|
use mopa::Any;
|
||||||
|
|
||||||
pub trait Link: Any {
|
pub trait Link: Any {
|
||||||
fn label (&self) -> &str;
|
fn label (&self) -> &str;
|
||||||
@ -13,6 +17,8 @@ pub trait Link: Any {
|
|||||||
fn as_any(&self) -> &Any;
|
fn as_any(&self) -> &Any;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mopafy!(Link);
|
||||||
|
|
||||||
impl Link for Box<Link + 'static> {
|
impl Link for Box<Link + 'static> {
|
||||||
fn label (&self) -> &str {
|
fn label (&self) -> &str {
|
||||||
(**self).label()
|
(**self).label()
|
||||||
|
@ -21,11 +21,12 @@ fn main () {
|
|||||||
searchers.add_searcher("gp", Box::new(MediawikiSearcher::new(String::from("https://gammapedia.monarch-pass.net/wiki/"))));
|
searchers.add_searcher("gp", Box::new(MediawikiSearcher::new(String::from("https://gammapedia.monarch-pass.net/wiki/"))));
|
||||||
searchers.add_searcher("ip", Box::new(MediawikiSearcher::new(String::from("http://infinitypedia.org/wiki/"))));
|
searchers.add_searcher("ip", Box::new(MediawikiSearcher::new(String::from("http://infinitypedia.org/wiki/"))));
|
||||||
searchers.add_searcher("wp", Box::new(MediawikiSearcher::new(String::from("https://en.wikipedia.org/wiki/"))));
|
searchers.add_searcher("wp", Box::new(MediawikiSearcher::new(String::from("https://en.wikipedia.org/wiki/"))));
|
||||||
|
|
||||||
match searchers.exact_search(&term) {
|
match searchers.exact_search(&term) {
|
||||||
Some(item) => {
|
Some(item) => {
|
||||||
if let Some(card) = item.as_any().downcast_ref::<MtgCard>() {
|
if let Some(card) = item.downcast_ref::<MtgCard>() {
|
||||||
println!("{:?}", card);
|
println!("{:?}", card);
|
||||||
} else if let Some(card) = item.as_any().downcast_ref::<YugiohCard>() {
|
} else if let Some(card) = item.downcast_ref::<YugiohCard>() {
|
||||||
println!("{:?}", card);
|
println!("{:?}", card);
|
||||||
} else {
|
} else {
|
||||||
println!("{}: {}", item.label(), item.url());
|
println!("{}: {}", item.label(), item.url());
|
||||||
|
@ -15,7 +15,8 @@ use retry::delay::Fixed;
|
|||||||
use std;
|
use std;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
|
|
||||||
use std::any::Any;
|
//use std::any::Any;
|
||||||
|
use mopa::Any;
|
||||||
|
|
||||||
const NUM_RETRIES: usize = 10;
|
const NUM_RETRIES: usize = 10;
|
||||||
const RETRY_WAIT_MILLIS: u64 = 500;
|
const RETRY_WAIT_MILLIS: u64 = 500;
|
||||||
|
@ -14,7 +14,8 @@ use retry::delay::Fixed;
|
|||||||
use std;
|
use std;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
|
|
||||||
use std::any::Any;
|
//use std::any::Any;
|
||||||
|
use mopa::Any;
|
||||||
|
|
||||||
const NUM_RETRIES: usize = 10;
|
const NUM_RETRIES: usize = 10;
|
||||||
const RETRY_WAIT_MILLIS: u64 = 500;
|
const RETRY_WAIT_MILLIS: u64 = 500;
|
||||||
|
@ -14,7 +14,8 @@ use retry::delay::Fixed;
|
|||||||
use std;
|
use std;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
|
|
||||||
use std::any::Any;
|
//use std::any::Any;
|
||||||
|
use mopa::Any;
|
||||||
|
|
||||||
const NUM_RETRIES: usize = 10;
|
const NUM_RETRIES: usize = 10;
|
||||||
const RETRY_WAIT_MILLIS: u64 = 500;
|
const RETRY_WAIT_MILLIS: u64 = 500;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user