pub trait EffectTrait: Any {
// Required methods
fn id(&self) -> Id;
fn run(&self) -> bool;
fn add_observer(&self, id: Id);
fn clear_observers(&self) -> HashSet<Id>;
fn as_any(&self) -> &dyn Any;
// Provided method
fn priority(&self) -> EffectPriority { ... }
}