Change observer update ref to &mut from &
This commit is contained in:
parent
d5b883a088
commit
78e63657c8
|
@ -17,7 +17,7 @@ pub struct ExampleObserver {}
|
||||||
// One struct can be an observer of multiple websocketevents, if needed
|
// One struct can be an observer of multiple websocketevents, if needed
|
||||||
impl Observer<GatewayReady> for ExampleObserver {
|
impl Observer<GatewayReady> for ExampleObserver {
|
||||||
// After we subscribe to an event this function is called every time we receive it
|
// 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!");
|
println!("Observed Ready!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -351,8 +351,11 @@ impl Gateway {
|
||||||
let gateway_hello: types::HelloData =
|
let gateway_hello: types::HelloData =
|
||||||
serde_json::from_str(gateway_payload.event_data.unwrap().get()).unwrap();
|
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 {
|
let mut gateway = Gateway {
|
||||||
events: Arc::new(Mutex::new(Events::default())),
|
events: shared_events.clone(),
|
||||||
heartbeat_handler: HeartbeatHandler::new(
|
heartbeat_handler: HeartbeatHandler::new(
|
||||||
gateway_hello.heartbeat_interval,
|
gateway_hello.heartbeat_interval,
|
||||||
shared_websocket_send.clone(),
|
shared_websocket_send.clone(),
|
||||||
|
@ -363,8 +366,6 @@ impl Gateway {
|
||||||
kill_send: kill_send.clone(),
|
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
|
// 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 {
|
let handle: JoinHandle<()> = task::spawn(async move {
|
||||||
gateway.gateway_listen_task().await;
|
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.
|
In this case, the Observable is a [`GatewayEvent`], which is a wrapper around a WebSocketEvent.
|
||||||
*/
|
*/
|
||||||
pub trait Observer<T: types::WebSocketEvent>: std::fmt::Debug {
|
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
|
/** 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) {
|
async fn notify(&self) {
|
||||||
for observer in &self.observers {
|
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)]
|
#[derive(Debug)]
|
||||||
struct Consumer;
|
struct Consumer;
|
||||||
impl Observer<types::GatewayResume> for Consumer {
|
impl Observer<types::GatewayResume> for Consumer {
|
||||||
fn update(&self, data: &types::GatewayResume) {
|
fn update(&mut self, data: &types::GatewayResume) {
|
||||||
println!("{}", data.token)
|
println!("{}", data.token)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue