//! ref: composer/src/Composer/EventDispatcher/Event.php use indexmap::IndexMap; use shirabe_php_shim::PhpMixed; #[derive(Debug)] pub struct Event { pub(crate) name: String, pub(crate) args: Vec, pub(crate) flags: IndexMap, propagation_stopped: bool, } impl Event { pub fn new(name: String, args: Vec, flags: IndexMap) -> Self { Self { name, args, flags, propagation_stopped: false, } } pub fn from_name(name: String) -> Self { Event::new(name, Vec::new(), IndexMap::new()) } pub fn get_name(&self) -> &str { &self.name } pub fn get_arguments(&self) -> &Vec { &self.args } pub fn get_flags(&self) -> &IndexMap { &self.flags } pub fn is_propagation_stopped(&self) -> bool { self.propagation_stopped } pub fn stop_propagation(&mut self) { self.propagation_stopped = true; } } pub trait EventInterface: std::fmt::Debug { fn get_name(&self) -> &str; fn get_arguments(&self) -> &Vec; fn get_flags(&self) -> &IndexMap; fn is_propagation_stopped(&self) -> bool; fn stop_propagation(&mut self); } impl EventInterface for Event { fn get_name(&self) -> &str { &self.name } fn get_arguments(&self) -> &Vec { &self.args } fn get_flags(&self) -> &IndexMap { &self.flags } fn is_propagation_stopped(&self) -> bool { self.propagation_stopped } fn stop_propagation(&mut self) { self.propagation_stopped = true; } }