mirror of
https://github.com/logos-messaging/logos-messaging-rust-bindings.git
synced 2026-06-04 08:49:52 +00:00
Implement event module
This commit is contained in:
parent
be030f2a1f
commit
aceff4d749
42
waku/src/events/mod.rs
Normal file
42
waku/src/events/mod.rs
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// std
|
||||||
|
use std::ffi::{c_char, CStr};
|
||||||
|
// crates
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
// internal
|
||||||
|
use crate::general::{PubsubTopic, WakuMessage};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct Signal {
|
||||||
|
#[serde(alias = "type")]
|
||||||
|
_type: String,
|
||||||
|
event: Event,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
#[serde(tag = "untagged", rename_all = "camelCase")]
|
||||||
|
pub enum Event {
|
||||||
|
WakuMessage(WakuMessageEvent),
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Type of `event` field for a `message` event
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct WakuMessageEvent {
|
||||||
|
/// The pubsub topic on which the message was received
|
||||||
|
pubsub_topic: PubsubTopic,
|
||||||
|
/// The message id
|
||||||
|
message_id: String,
|
||||||
|
/// The message in [`WakuMessage`] format
|
||||||
|
waku_message: WakuMessage,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn waku_set_event_callback<F: FnMut(Signal)>(mut callback: F) {
|
||||||
|
let mut callback = move |data: *const c_char| {
|
||||||
|
let raw_response = unsafe { CStr::from_ptr(data) }
|
||||||
|
.to_str()
|
||||||
|
.expect("Not null ptr");
|
||||||
|
let data: Signal = serde_json::from_str(raw_response).expect("Parsing signal to succeed");
|
||||||
|
callback(data);
|
||||||
|
};
|
||||||
|
unsafe { waku_sys::waku_set_event_callback(&mut callback as *mut _ as *mut std::ffi::c_void) };
|
||||||
|
}
|
||||||
@ -1,4 +1,5 @@
|
|||||||
mod general;
|
mod general;
|
||||||
|
mod events;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user