event.rs

 1use std::fmt::Debug;
 2
 3use std::any::Any;
 4
 5pub struct AbstractEvent {
 6    inner: Box<Any>,
 7}
 8
 9impl AbstractEvent {
10    pub fn new<E: Event>(event: E) -> AbstractEvent {
11        AbstractEvent {
12            inner: Box::new(event),
13        }
14    }
15
16    pub fn downcast<E: Event + 'static>(&self) -> Option<&E> {
17        self.inner.downcast_ref::<E>()
18    }
19
20    pub fn is<E: Event + 'static>(&self) -> bool {
21        self.inner.is::<E>()
22    }
23}
24
25pub trait Event: Any + Debug {}