blob: 36f4426f2b95800ae829dcab910bf4db8eef6c1e [file] [log] [blame]
extern crate downcast;
// careful: do not combine downcast_sync! with downcast::Any, you will get `size not known at compile time` errors
use downcast::{downcast_sync, AnySync};
use std::sync::Arc;
/* Trait */
trait Service: AnySync {
fn what_am_i(&self);
}
downcast_sync!(dyn Service);
/* Impl */
struct Database {}
impl Service for Database {
fn what_am_i(&self){
println!("I'm a database!");
}
}
impl Database {
fn purge_data(&self) {
println!("Database has been purged! Goodbye, data!")
}
}
fn main(){
let service: Arc<dyn Service> = Arc::new(Database{});
service.what_am_i();
{
let db = service.downcast_ref::<Database>().unwrap();
db.purge_data();
}
let db: Arc<Database> = service.downcast_arc::<Database>().ok().unwrap();
db.purge_data();
}