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}