Assuming reflection exists,it sounds like it could be implemented with a SuperEvent associated type with a value of Some_<ListOfEvents>/None_
Edit:
Here is an example of what a simple event trait could be :
struct None_;
struct Some_<T>(PhantomData<T>);
trait Event<AnEvent>{
type SuperEvent;
fn notify(&mut self,event:AnEvent);
}
struct Something{
number:u32,
}
impl Event<u32> for Something{
type SuperEvent=None_;
fn notify(&mut self,event:u32){
self.number+=event;
}
}
struct OtherThing{
number:u64,
}
impl Event<u64> for Otherthing{
type SuperEvent=Some_<SomeThing>;
fn notify(&mut self,event:u64){
self.number+=event;
}
}