start implementing ovserver

This commit is contained in:
bitfl0wer 2023-04-27 17:57:10 +02:00
parent 8a7d61804f
commit 155a27d49d
No known key found for this signature in database
GPG Key ID: 84BBB60DF895ABF2
1 changed files with 39 additions and 2 deletions

View File

@ -1,4 +1,41 @@
#[derive(Debug)]
pub struct Gateway {
url: String,
pub struct Gateway {}
pub trait Observer {
fn update(&self, data: &str);
}
pub struct GatewayEvent<'a> {
observers: Vec<&'a dyn Observer>,
test_content: String,
}
impl<'a> GatewayEvent<'a> {
pub fn new(test_content: String) -> Self {
Self {
observers: Vec::new(),
test_content,
}
}
pub fn subscribe(&mut self, observable: &'a dyn Observer) {
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);
}
}
pub fn update_data(&mut self, test_content: String) {
self.test_content = test_content;
self.notify();
}
pub fn notify(&self) {
for observer in &self.observers {
observer.update(&self.test_content);
}
}
}