fix: pubsub topic is a string

This commit is contained in:
Richard Ramos 2023-11-02 14:33:50 -04:00
parent c04eb6b7ee
commit ba706164b1
No known key found for this signature in database
GPG Key ID: 1CE87DB518195760
4 changed files with 8 additions and 75 deletions

View File

@ -20,7 +20,7 @@ jobs:
run: git submodule update --init --recursive
- uses: actions/setup-go@v3 # we need go to build go-waku
with:
go-version: '1.19'
go-version: '1.20'
- uses: actions-rs/toolchain@v1
with:
profile: minimal

View File

@ -29,7 +29,7 @@ jobs:
run: git submodule update --init --recursive
- uses: actions/setup-go@v3 # we need go to build go-waku
with:
go-version: '1.19'
go-version: '1.20'
- uses: actions-rs/toolchain@v1
with:
profile: minimal
@ -61,7 +61,7 @@ jobs:
run: git submodule update --init --recursive
- uses: actions/setup-go@v3 # we need go to build go-waku
with:
go-version: '1.19'
go-version: '1.20'
- uses: actions-rs/toolchain@v1
with:
profile: minimal
@ -88,7 +88,7 @@ jobs:
run: git submodule update --init --recursive
- uses: actions/setup-go@v3 # we need go to build go-waku
with:
go-version: '1.19'
go-version: '1.20'
- uses: actions-rs/toolchain@v1
with:
profile: minimal

4
examples/Cargo.lock generated
View File

@ -1497,7 +1497,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "waku-bindings"
version = "0.4.0"
version = "0.5.0"
dependencies = [
"aes-gcm",
"base64 0.21.0",
@ -1518,7 +1518,7 @@ dependencies = [
[[package]]
name = "waku-sys"
version = "0.3.0"
version = "0.5.0"
dependencies = [
"bindgen",
]

View File

@ -20,6 +20,8 @@ pub type WakuMessageVersion = usize;
pub type PeerId = String;
/// Waku message id, hex encoded sha256 digest of the message
pub type MessageId = String;
/// Waku pubsub topic
pub type WakuPubSubTopic = String;
/// Protocol identifiers
#[non_exhaustive]
@ -515,75 +517,6 @@ impl<'de> Deserialize<'de> for WakuContentTopic {
}
}
/// A waku pubsub topic in the form of `/waku/v2/{topic_name}/{encoding}`
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct WakuPubSubTopic {
pub topic_name: Cow<'static, str>,
pub encoding: Encoding,
}
impl WakuPubSubTopic {
pub const fn new(topic_name: &'static str, encoding: Encoding) -> Self {
Self {
topic_name: Cow::Borrowed(topic_name),
encoding,
}
}
pub fn with_topic_name(topic_name: String, encoding: Encoding) -> Self {
Self {
topic_name: Cow::Owned(topic_name),
encoding,
}
}
}
impl FromStr for WakuPubSubTopic {
type Err = String;
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
if let Ok((topic_name, encoding)) = scanf!(s, "/waku/2/{}/{:/.+?/}", String, Encoding) {
Ok(WakuPubSubTopic {
topic_name: Cow::Owned(topic_name),
encoding,
})
} else {
Err(
format!(
"Wrong pub-sub topic format. Should be `/waku/2/{{topic-name}}/{{encoding}}`. Got: {s}"
)
)
}
}
}
impl Display for WakuPubSubTopic {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "/waku/2/{}/{}", self.topic_name, self.encoding)
}
}
impl Serialize for WakuPubSubTopic {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: Serializer,
{
self.to_string().serialize(serializer)
}
}
impl<'de> Deserialize<'de> for WakuPubSubTopic {
fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let as_string: String = String::deserialize(deserializer)?;
as_string
.parse::<WakuPubSubTopic>()
.map_err(D::Error::custom)
}
}
mod base64_serde {
use base64::Engine;
use serde::de::Error;