2023-04-16 23:03:24 +02:00
|
|
|
#[derive(Debug)]
|
2023-04-27 17:57:10 +02:00
|
|
|
pub struct Gateway {}
|
|
|
|
|
|
|
|
pub trait Observer {
|
|
|
|
fn update(&self, data: &str);
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct GatewayEvent<'a> {
|
|
|
|
observers: Vec<&'a dyn Observer>,
|
2023-04-27 22:29:07 +02:00
|
|
|
pub test_content: String,
|
|
|
|
pub is_observed: bool,
|
2023-04-27 17:57:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
impl<'a> GatewayEvent<'a> {
|
2023-04-27 22:29:07 +02:00
|
|
|
fn new(test_content: String) -> Self {
|
2023-04-27 17:57:10 +02:00
|
|
|
Self {
|
2023-04-27 22:29:07 +02:00
|
|
|
is_observed: false,
|
2023-04-27 17:57:10 +02:00
|
|
|
observers: Vec::new(),
|
|
|
|
test_content,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-04-27 22:29:07 +02:00
|
|
|
pub fn is_observed(&self) -> bool {
|
|
|
|
self.is_observed
|
|
|
|
}
|
|
|
|
|
2023-04-27 17:57:10 +02:00
|
|
|
pub fn subscribe(&mut self, observable: &'a dyn Observer) {
|
2023-04-27 22:29:07 +02:00
|
|
|
if self.is_observed {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
self.is_observed = true;
|
2023-04-27 17:57:10 +02:00
|
|
|
self.observers.push(observable)
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn unsubscribe(&mut self, observable: &'a dyn Observer) {
|
2023-04-27 22:29:07 +02:00
|
|
|
self.observers.pop();
|
|
|
|
self.is_observed = false;
|
|
|
|
return;
|
2023-04-27 17:57:10 +02:00
|
|
|
}
|
|
|
|
|
2023-04-27 22:29:07 +02:00
|
|
|
fn update_data(&mut self, test_content: String) {
|
2023-04-27 17:57:10 +02:00
|
|
|
self.test_content = test_content;
|
|
|
|
self.notify();
|
|
|
|
}
|
|
|
|
|
2023-04-27 22:29:07 +02:00
|
|
|
fn notify(&self) {
|
2023-04-27 17:57:10 +02:00
|
|
|
for observer in &self.observers {
|
|
|
|
observer.update(&self.test_content);
|
|
|
|
}
|
|
|
|
}
|
2023-04-25 17:21:27 +02:00
|
|
|
}
|