Make topics const initializable (#28)
* Make topics const initializable * Fix test * Derive Eq, PartialEq for topics
This commit is contained in:
parent
3f85a09b88
commit
aa06fcc969
|
@ -1094,7 +1094,6 @@ version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
"once_cell",
|
|
||||||
"prost",
|
"prost",
|
||||||
"tui",
|
"tui",
|
||||||
"unicode-width",
|
"unicode-width",
|
||||||
|
|
|
@ -13,5 +13,4 @@ tui = "0.19"
|
||||||
crossterm = "0.25"
|
crossterm = "0.25"
|
||||||
unicode-width = "0.1"
|
unicode-width = "0.1"
|
||||||
prost = "0.11"
|
prost = "0.11"
|
||||||
once_cell = "1.15"
|
|
||||||
chrono = "0.4"
|
chrono = "0.4"
|
|
@ -1,14 +1,9 @@
|
||||||
use chrono::{DateTime, LocalResult, TimeZone, Utc};
|
use chrono::{DateTime, LocalResult, TimeZone, Utc};
|
||||||
use once_cell::sync::Lazy;
|
|
||||||
use prost::Message;
|
use prost::Message;
|
||||||
use waku_bindings::{Encoding, WakuContentTopic};
|
use waku_bindings::{Encoding, WakuContentTopic};
|
||||||
|
|
||||||
pub static TOY_CHAT_CONTENT_TOPIC: Lazy<WakuContentTopic> = Lazy::new(|| WakuContentTopic {
|
pub static TOY_CHAT_CONTENT_TOPIC: WakuContentTopic =
|
||||||
application_name: "toy-chat".into(),
|
WakuContentTopic::new("toy-chat", 2, "huilong", Encoding::Proto);
|
||||||
version: 2,
|
|
||||||
content_topic_name: "huilong".into(),
|
|
||||||
encoding: Encoding::Proto,
|
|
||||||
});
|
|
||||||
|
|
||||||
#[derive(Clone, Message)]
|
#[derive(Clone, Message)]
|
||||||
pub struct Chat2Message {
|
pub struct Chat2Message {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
//! Waku [general](https://rfc.vac.dev/spec/36/#general) types
|
//! Waku [general](https://rfc.vac.dev/spec/36/#general) types
|
||||||
|
|
||||||
|
use std::borrow::Cow;
|
||||||
// std
|
// std
|
||||||
use std::fmt::{Display, Formatter};
|
use std::fmt::{Display, Formatter};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
@ -285,7 +286,7 @@ pub struct MessageIndex {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// WakuMessage encoding scheme
|
/// WakuMessage encoding scheme
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum Encoding {
|
pub enum Encoding {
|
||||||
Proto,
|
Proto,
|
||||||
Rlp,
|
Rlp,
|
||||||
|
@ -321,14 +322,30 @@ impl RegexRepresentation for Encoding {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A waku content topic `/{application_name}/{version}/{content_topic_name}/{encdoing}`
|
/// A waku content topic `/{application_name}/{version}/{content_topic_name}/{encdoing}`
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||||
pub struct WakuContentTopic {
|
pub struct WakuContentTopic {
|
||||||
pub application_name: String,
|
pub application_name: Cow<'static, str>,
|
||||||
pub version: usize,
|
pub version: usize,
|
||||||
pub content_topic_name: String,
|
pub content_topic_name: Cow<'static, str>,
|
||||||
pub encoding: Encoding,
|
pub encoding: Encoding,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl WakuContentTopic {
|
||||||
|
pub const fn new(
|
||||||
|
application_name: &'static str,
|
||||||
|
version: usize,
|
||||||
|
content_topic_name: &'static str,
|
||||||
|
encoding: Encoding,
|
||||||
|
) -> Self {
|
||||||
|
Self {
|
||||||
|
application_name: Cow::Borrowed(application_name),
|
||||||
|
version,
|
||||||
|
content_topic_name: Cow::Borrowed(content_topic_name),
|
||||||
|
encoding,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl FromStr for WakuContentTopic {
|
impl FromStr for WakuContentTopic {
|
||||||
type Err = String;
|
type Err = String;
|
||||||
|
|
||||||
|
@ -337,9 +354,9 @@ impl FromStr for WakuContentTopic {
|
||||||
scanf!(s, "/{}/{}/{}/{:/.+?/}", String, usize, String, Encoding)
|
scanf!(s, "/{}/{}/{}/{:/.+?/}", String, usize, String, Encoding)
|
||||||
{
|
{
|
||||||
Ok(WakuContentTopic {
|
Ok(WakuContentTopic {
|
||||||
application_name,
|
application_name: Cow::Owned(application_name),
|
||||||
version,
|
version,
|
||||||
content_topic_name,
|
content_topic_name: Cow::Owned(content_topic_name),
|
||||||
encoding,
|
encoding,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
@ -385,16 +402,23 @@ impl<'de> Deserialize<'de> for WakuContentTopic {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A waku pubsub topic in the form of `/waku/v2/{topic_name}/{encoding}`
|
/// A waku pubsub topic in the form of `/waku/v2/{topic_name}/{encoding}`
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||||
pub struct WakuPubSubTopic {
|
pub struct WakuPubSubTopic {
|
||||||
pub topic_name: String,
|
pub topic_name: Cow<'static, str>,
|
||||||
pub encoding: Encoding,
|
pub encoding: Encoding,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WakuPubSubTopic {
|
impl WakuPubSubTopic {
|
||||||
pub fn new(topic_name: String, encoding: Encoding) -> Self {
|
pub const fn new(topic_name: &'static str, encoding: Encoding) -> Self {
|
||||||
Self {
|
Self {
|
||||||
topic_name,
|
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,
|
encoding,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -406,7 +430,7 @@ impl FromStr for WakuPubSubTopic {
|
||||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||||
if let Ok((topic_name, encoding)) = scanf!(s, "/waku/2/{}/{:/.+?/}", String, Encoding) {
|
if let Ok((topic_name, encoding)) = scanf!(s, "/waku/2/{}/{:/.+?/}", String, Encoding) {
|
||||||
Ok(WakuPubSubTopic {
|
Ok(WakuPubSubTopic {
|
||||||
topic_name,
|
topic_name: Cow::Owned(topic_name),
|
||||||
encoding,
|
encoding,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -83,12 +83,7 @@ pub fn main() -> Result<(), String> {
|
||||||
|
|
||||||
// subscribe to default channel
|
// subscribe to default channel
|
||||||
node.relay_subscribe(None)?;
|
node.relay_subscribe(None)?;
|
||||||
let content_topic = WakuContentTopic {
|
let content_topic = WakuContentTopic::new("toychat", 2, "huilong", Encoding::Proto);
|
||||||
application_name: "toychat".to_string(),
|
|
||||||
version: 2,
|
|
||||||
content_topic_name: "huilong".to_string(),
|
|
||||||
encoding: Encoding::Proto,
|
|
||||||
};
|
|
||||||
|
|
||||||
let message = WakuMessage::new(
|
let message = WakuMessage::new(
|
||||||
content,
|
content,
|
||||||
|
|
Loading…
Reference in New Issue