From bd64bbde24279fdf784157d486438bc77726670e Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Thu, 27 Apr 2023 22:29:07 +0200 Subject: [PATCH] Update observer implementation --- src/gateway.rs | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) 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); }