Skip to main content

hanabi_core/protocol/request/
pubsub.rs

1use crate::engines::pubsub::Message;
2use crate::util::Consumable;
3
4/// Request types related to the Pub/Sub engine.
5#[derive(Debug, Clone, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize)]
6pub enum PubSubRequest {
7    Publish(PubSubPublishRequest),
8    Subscribe(PubSubSubscribeRequest),
9}
10
11/// Request to publish a message to a topic.
12#[derive(Debug, Clone, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize)]
13pub struct PubSubPublishRequest {
14    id: ulid::Ulid,
15    message: Message,
16}
17
18impl PubSubPublishRequest {
19    pub fn new(message: Message) -> Self {
20        Self {
21            id: ulid::Ulid::new(),
22            message,
23        }
24    }
25
26    pub fn id(&self) -> ulid::Ulid {
27        self.id
28    }
29}
30
31impl Consumable<Message> for PubSubPublishRequest {
32    fn consume(self) -> Message {
33        self.message
34    }
35}
36
37/// Request to subscribe to a topic.
38#[derive(Debug, Clone, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize)]
39pub struct PubSubSubscribeRequest {
40    id: ulid::Ulid,
41    topic: String,
42}
43
44impl PubSubSubscribeRequest {
45    pub fn new(topic: String) -> Self {
46        Self {
47            id: ulid::Ulid::new(),
48            topic,
49        }
50    }
51
52    pub fn id(&self) -> ulid::Ulid {
53        self.id
54    }
55}
56
57impl Consumable<String> for PubSubSubscribeRequest {
58    fn consume(self) -> String {
59        self.topic
60    }
61}