basic/
basic.rs

1use general_pub_sub::{Client, Message, PubSub, PubSubError};
2
3#[derive(Clone, Copy)]
4struct BasicClient {
5    id: u32,
6}
7
8impl BasicClient {
9    pub fn new(id: u32) -> BasicClient {
10        BasicClient { id }
11    }
12}
13
14impl Client<u32, &str> for BasicClient {
15    fn get_id(&self) -> u32 {
16        self.id
17    }
18
19    fn send(&mut self, message: &Message<&str>) {
20        println!(
21            "Client ({}) Received Message from Channel ({}): {}",
22            self.id, message.source, message.contents
23        );
24    }
25}
26
27fn main() {
28    let mut pubsub = PubSub::new();
29
30    let client_one = BasicClient::new(1);
31    let client_two = BasicClient::new(2);
32
33    let channel_a = "channel.a";
34    let channel_b = "channel.b";
35
36    pubsub.add_client(client_one);
37    pubsub.add_client(client_two);
38
39    pubsub
40        .sub_client(client_one, channel_a)
41        .expect("This should not happen");
42    pubsub
43        .sub_client(client_two, channel_a)
44        .expect("This should not happen");
45    pubsub
46        .sub_client(client_one, channel_b)
47        .expect("This should not happen");
48
49    pubsub.pub_message(channel_a, "Both clients should receive this message.");
50    pubsub.pub_message(channel_b, "Only Client 1 should receive this message.");
51
52    pubsub
53        .unsub_client(client_one, channel_a)
54        .expect("This should not happen");
55
56    pubsub.pub_message(channel_a, "Only Client 2 should receive this message.");
57
58    pubsub.remove_client(client_one);
59
60    pubsub
61        .unsub_client(client_two, channel_a)
62        .expect("This should not happen");
63
64    pubsub.pub_message(channel_a, "Nobody should receive this message.");
65
66    if let Result::Err(expected_error) = pubsub.unsub_client(client_one, channel_a) {
67        match expected_error {
68            PubSubError::ClientNotSubscribedError => {
69                println!("This error is expected: {}", expected_error)
70            }
71            _ => println!("This should not happen: {}", expected_error),
72        }
73    }
74}