diff --git a/examples/basic/src/main.rs b/examples/basic/src/main.rs index d087fe3..4cb1170 100644 --- a/examples/basic/src/main.rs +++ b/examples/basic/src/main.rs @@ -40,6 +40,7 @@ async fn main() -> Result<(), Error> { println!("Message Received in NODE 2: {}", msg); println!("::::::::::::::::::::::::::::::::::::::::::::::::::::"); } + WakuEvent::RelayTopicHealthChange(_evt) => {} // do nothing WakuEvent::Unrecognized(err) => panic!("Unrecognized waku event: {:?}", err), _ => panic!("event case not expected"), }; diff --git a/examples/tic-tac-toe-gui/src/main.rs b/examples/tic-tac-toe-gui/src/main.rs index b993745..7009741 100644 --- a/examples/tic-tac-toe-gui/src/main.rs +++ b/examples/tic-tac-toe-gui/src/main.rs @@ -74,7 +74,8 @@ impl TicTacToeApp { // Handle the error as needed, or just log and skip } } - } + }, + WakuEvent::RelayTopicHealthChange(_evt) => {}, // do nothing WakuEvent::Unrecognized(err) => panic!("Unrecognized waku event: {:?}", err), _ => panic!("event case not expected"), }; diff --git a/examples/toy-chat/src/main.rs b/examples/toy-chat/src/main.rs index 01ca567..53c1db8 100644 --- a/examples/toy-chat/src/main.rs +++ b/examples/toy-chat/src/main.rs @@ -110,7 +110,8 @@ impl App { write!(out, "{e:?}").unwrap(); } } - } + }, + WakuEvent::RelayTopicHealthChange(_evt) => {} // do nothing WakuEvent::Unrecognized(err) => eprintln!("Unrecognized waku event: {:?}", err), _ => eprintln!("event case not expected"), }; diff --git a/waku-bindings/src/node/events.rs b/waku-bindings/src/node/events.rs index 029bb98..b0eebc8 100644 --- a/waku-bindings/src/node/events.rs +++ b/waku-bindings/src/node/events.rs @@ -20,6 +20,10 @@ use crate::MessageHash; pub enum WakuEvent { #[serde(rename = "message")] WakuMessage(WakuMessageEvent), + + #[serde(rename = "relay_topic_health_change")] + RelayTopicHealthChange(TopicHealthEvent), + Unrecognized(serde_json::Value), } @@ -35,9 +39,20 @@ pub struct WakuMessageEvent { pub waku_message: WakuMessage, } +/// Type of `event` field for a `message` event +#[derive(Serialize, Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct TopicHealthEvent { + /// The pubsub topic on which the message was received + pub pubsub_topic: String, + /// The message hash + pub topic_health: String, +} + #[cfg(test)] mod tests { use crate::WakuEvent; + use crate::WakuEvent::RelayTopicHealthChange; #[test] fn deserialize_message_event() { @@ -45,4 +60,17 @@ mod tests { let evt: WakuEvent = serde_json::from_str(s).unwrap(); assert!(matches!(evt, WakuEvent::WakuMessage(_))); } + + #[test] + fn deserialize_topic_health_change_event() { + let s = "{\"eventType\":\"relay_topic_health_change\", \"pubsubTopic\":\"/waku/2/rs/16/1\",\"topicHealth\":\"MinimallyHealthy\"}"; + let evt: WakuEvent = serde_json::from_str(s).unwrap(); + match evt { + RelayTopicHealthChange(topic_health_event) => { + assert_eq!(topic_health_event.pubsub_topic, "/waku/2/rs/16/1"); + assert_eq!(topic_health_event.topic_health, "MinimallyHealthy"); + } + _ => panic!("Expected RelayTopicHealthChange event, but got {:?}", evt), + } + } }