From 8d3fb9f2ff17f2fa334372c797f09ee77e4a4b7a Mon Sep 17 00:00:00 2001 From: Daniel Sanchez Quiros Date: Sat, 8 Oct 2022 08:58:14 -0500 Subject: [PATCH] Payload as base64 --- Cargo.lock | 1 + waku/Cargo.toml | 1 + waku/src/general/mod.rs | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index cc547ac..5f37f20 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -977,6 +977,7 @@ name = "waku" version = "0.1.0" dependencies = [ "aes-gcm", + "base64", "hex", "libsecp256k1", "multiaddr", diff --git a/waku/Cargo.toml b/waku/Cargo.toml index d9eed35..fb3da29 100644 --- a/waku/Cargo.toml +++ b/waku/Cargo.toml @@ -7,6 +7,7 @@ edition = "2021" [dependencies] aes-gcm = { version = "0.10", features = ["aes"] } +base64 = "0.13" hex = "0.4" libsecp256k1 = "0.7" multiaddr = "0.14" diff --git a/waku/src/general/mod.rs b/waku/src/general/mod.rs index 465048e..596ca23 100644 --- a/waku/src/general/mod.rs +++ b/waku/src/general/mod.rs @@ -45,6 +45,7 @@ impl From> for Result { #[derive(Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct WakuMessage { + #[serde(with = "base64_serde")] payload: Vec, /// The content topic to be set on the message content_topic: WakuContentTopic, @@ -398,3 +399,23 @@ impl<'de> Deserialize<'de> for WakuPubSubTopic { .map_err(D::Error::custom) } } + +mod base64_serde { + use serde::de::Error; + use serde::{Deserialize, Deserializer, Serialize, Serializer}; + + pub fn serialize(value: &[u8], serializer: S) -> std::result::Result + where + S: Serializer, + { + base64::encode(value).serialize(serializer) + } + + pub fn deserialize<'de, D>(deserializer: D) -> std::result::Result, D::Error> + where + D: Deserializer<'de>, + { + let base64_str: String = String::deserialize(deserializer)?; + base64::decode(base64_str).map_err(D::Error::custom) + } +}