From d090d9cdd8ac80b825d971e120c4cafe5387a4d6 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Tue, 9 May 2023 14:00:20 -0400 Subject: [PATCH] feat: add ephemeral and meta fields --- Cargo.lock | 4 ++-- examples/toy-chat/src/main.rs | 3 +++ waku-bindings/src/general/mod.rs | 20 ++++++++++++++++++-- waku-bindings/tests/node.rs | 2 ++ 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ea928b1..3cd0756 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1674,7 +1674,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "waku-bindings" -version = "0.1.0-rc.2" +version = "0.1.0-rc.3" dependencies = [ "aes-gcm", "base64 0.21.0", @@ -1697,7 +1697,7 @@ dependencies = [ [[package]] name = "waku-sys" -version = "0.1.0-rc.2" +version = "0.1.0-rc.3" dependencies = [ "bindgen", ] diff --git a/examples/toy-chat/src/main.rs b/examples/toy-chat/src/main.rs index cf0c9bc..53eb015 100644 --- a/examples/toy-chat/src/main.rs +++ b/examples/toy-chat/src/main.rs @@ -193,12 +193,15 @@ fn run_app( let message_content: String = app.input.drain(..).collect(); let message = Chat2Message::new(&app.nick, &message_content); let mut buff = Vec::new(); + let meta = Vec::new(); Message::encode(&message, &mut buff)?; let waku_message = WakuMessage::new( buff, TOY_CHAT_CONTENT_TOPIC.clone(), 1, Utc::now().timestamp_nanos() as usize, + meta, + false ); if let Err(e) = app.node_handle diff --git a/waku-bindings/src/general/mod.rs b/waku-bindings/src/general/mod.rs index b3a5c16..03b801f 100644 --- a/waku-bindings/src/general/mod.rs +++ b/waku-bindings/src/general/mod.rs @@ -89,25 +89,33 @@ pub struct WakuMessage { version: WakuMessageVersion, /// Unix timestamp in nanoseconds timestamp: usize, + #[serde(with = "base64_serde")] + meta: Vec, + ephemeral: bool, // TODO: implement RLN fields #[serde(flatten)] _extras: serde_json::Value, } impl WakuMessage { - pub fn new>( + pub fn new, META: AsRef<[u8]>>( payload: PAYLOAD, content_topic: WakuContentTopic, version: WakuMessageVersion, timestamp: usize, + meta: META, + ephemeral: bool ) -> Self { let payload = payload.as_ref().to_vec(); + let meta = meta.as_ref().to_vec(); Self { payload, content_topic, version, timestamp, + meta, + ephemeral, _extras: Default::default(), } } @@ -128,6 +136,14 @@ impl WakuMessage { self.timestamp } + pub fn meta(&self) -> &[u8] { + &self.meta + } + + pub fn ephemeral(&self) -> bool { + self.ephemeral + } + /// Try decode the message with an expected symmetric key /// /// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_decode_symmetricchar-messagejson-char-symmetrickey) @@ -555,7 +571,7 @@ mod tests { #[test] fn deserialize_waku_message() { - let message = "{\"payload\":\"SGkgZnJvbSDwn6aAIQ==\",\"contentTopic\":\"/toychat/2/huilong/proto\",\"timestamp\":1665580926660}"; + let message = "{\"payload\":\"SGkgZnJvbSDwn6aAIQ==\",\"contentTopic\":\"/toychat/2/huilong/proto\",\"timestamp\":1665580926660,\"ephemeral\":true,\"meta\":\"SGkgZnJvbSDwn6aAIQ==\"}"; let _: WakuMessage = serde_json::from_str(message).unwrap(); } } diff --git a/waku-bindings/tests/node.rs b/waku-bindings/tests/node.rs index 326bf1f..dc0c1a8 100644 --- a/waku-bindings/tests/node.rs +++ b/waku-bindings/tests/node.rs @@ -119,6 +119,8 @@ async fn test_echo_messages( .as_millis() .try_into() .unwrap(), + Vec::new(), + false ); let (tx, mut rx) = mpsc::channel(1);