Change observer update ref to &mut from &

This commit is contained in:
kozabrada123 2023-06-10 15:37:02 +02:00
parent d5b883a088
commit 78e63657c8
2 changed files with 10 additions and 7 deletions

View File

@ -17,7 +17,7 @@ pub struct ExampleObserver {}
// One struct can be an observer of multiple websocketevents, if needed
impl Observer<GatewayReady> for ExampleObserver {
// After we subscribe to an event this function is called every time we receive it
fn update(&self, _data: &GatewayReady) {
fn update(&mut self, _data: &GatewayReady) {
println!("Observed Ready!");
}
}

View File

@ -351,8 +351,11 @@ impl Gateway {
let gateway_hello: types::HelloData =
serde_json::from_str(gateway_payload.event_data.unwrap().get()).unwrap();
let events = Events::default();
let shared_events = Arc::new(Mutex::new(events));
let mut gateway = Gateway {
events: Arc::new(Mutex::new(Events::default())),
events: shared_events.clone(),
heartbeat_handler: HeartbeatHandler::new(
gateway_hello.heartbeat_interval,
shared_websocket_send.clone(),
@ -363,8 +366,6 @@ impl Gateway {
kill_send: kill_send.clone(),
};
let shared_events = gateway.events.clone();
// Now we can continuously check for messages in a different task, since we aren't going to receive another hello
let handle: JoinHandle<()> = task::spawn(async move {
gateway.gateway_listen_task().await;
@ -1715,7 +1716,7 @@ an Observable. The Observer is notified when the Observable's data changes.
In this case, the Observable is a [`GatewayEvent`], which is a wrapper around a WebSocketEvent.
*/
pub trait Observer<T: types::WebSocketEvent>: std::fmt::Debug {
fn update(&self, data: &T);
fn update(&mut self, data: &T);
}
/** GatewayEvent is a wrapper around a WebSocketEvent. It is used to notify the observers of a
@ -1790,7 +1791,9 @@ impl<T: types::WebSocketEvent> GatewayEvent<T> {
*/
async fn notify(&self) {
for observer in &self.observers {
observer.lock().await.update(&self.event_data);
let mut observer_lock = observer.lock().await;
observer_lock.update(&self.event_data);
drop(observer_lock);
}
}
}
@ -1962,7 +1965,7 @@ mod example {
#[derive(Debug)]
struct Consumer;
impl Observer<types::GatewayResume> for Consumer {
fn update(&self, data: &types::GatewayResume) {
fn update(&mut self, data: &types::GatewayResume) {
println!("{}", data.token)
}
}