diff --git a/src/gateway.rs b/src/gateway.rs index c7988a1..7206c4e 100644 --- a/src/gateway.rs +++ b/src/gateway.rs @@ -7,33 +7,43 @@ pub trait Observer { pub struct GatewayEvent<'a> { observers: Vec<&'a dyn Observer>, - test_content: String, + pub test_content: String, + pub is_observed: bool, } impl<'a> GatewayEvent<'a> { - pub fn new(test_content: String) -> Self { + fn new(test_content: String) -> Self { Self { + is_observed: false, observers: Vec::new(), test_content, } } + pub fn is_observed(&self) -> bool { + self.is_observed + } + pub fn subscribe(&mut self, observable: &'a dyn Observer) { + if self.is_observed { + return; + } + self.is_observed = true; self.observers.push(observable) } pub fn unsubscribe(&mut self, observable: &'a dyn Observer) { - if let Some(index) = self.observers.iter().position(|&o| o == observable) { - self.observers.remove(index); - } + self.observers.pop(); + self.is_observed = false; + return; } - pub fn update_data(&mut self, test_content: String) { + fn update_data(&mut self, test_content: String) { self.test_content = test_content; self.notify(); } - pub fn notify(&self) { + fn notify(&self) { for observer in &self.observers { observer.update(&self.test_content); }