chorus/src/gateway.rs

52 lines
1.1 KiB
Rust
Raw Normal View History

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
}