blob: c5841befb3a4b2ec715852054728d1310a4b2712 [file] [log] [blame]
extern crate downcast;
// we need to use downcast::Any instead of std::any::Any
use downcast::{downcast, Any};
/* Trait */
trait Animal: Any {
fn what_am_i(&self);
}
downcast!(dyn Animal);
/* Impl */
struct Bird;
impl Animal for Bird {
fn what_am_i(&self){
println!("Im a bird!")
}
}
impl Bird {
fn wash_beak(&self) {
println!("Beak has been washed! What a clean beak!");
}
}
/* Main */
fn main() {
let animal: Box<dyn Animal> = Box::new(Bird);
animal.what_am_i();
{
let bird = animal.downcast_ref::<Bird>().unwrap();
bird.wash_beak();
}
let bird: Box<Bird> = animal.downcast::<Bird>().ok().unwrap();
bird.wash_beak();
}