Payload as base64

This commit is contained in:
Daniel Sanchez Quiros 2022-10-08 08:58:14 -05:00
parent 530ea8fb5e
commit 8d3fb9f2ff
3 changed files with 23 additions and 0 deletions

1
Cargo.lock generated
View File

@ -977,6 +977,7 @@ name = "waku"
version = "0.1.0"
dependencies = [
"aes-gcm",
"base64",
"hex",
"libsecp256k1",
"multiaddr",

View File

@ -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"

View File

@ -45,6 +45,7 @@ impl<T> From<JsonResponse<T>> for Result<T> {
#[derive(Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WakuMessage {
#[serde(with = "base64_serde")]
payload: Vec<u8>,
/// 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<S>(value: &[u8], serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: Serializer,
{
base64::encode(value).serialize(serializer)
}
pub fn deserialize<'de, D>(deserializer: D) -> std::result::Result<Vec<u8>, D::Error>
where
D: Deserializer<'de>,
{
let base64_str: String = String::deserialize(deserializer)?;
base64::decode(base64_str).map_err(D::Error::custom)
}
}