event_stream/
event_stream.rs1#[derive(PartialEq)]
2enum MouseButton {
3 Right,
4 Middle,
5 Left,
6}
7
8struct MyButton {
9 click_host: epoxy::Sink<MouseButton>,
10}
11
12impl MyButton {
13 pub fn new() -> MyButton {
14 MyButton {
15 click_host: epoxy::Sink::new(),
16 }
17 }
18
19 pub fn get_clicks(&self) -> epoxy::Stream<MouseButton> {
20 self.click_host.get_stream()
21 }
22
23 pub fn click(&self, button: MouseButton) {
24 self.click_host.emit(button)
25 }
26}
27
28fn main() {
29 let button = MyButton::new();
30 let all_clicks_count = button.get_clicks().count_values();
31 let left_clicks_count = button
32 .get_clicks()
33 .filter(|click| *click == MouseButton::Left)
34 .count_values();
35
36 button.click(MouseButton::Left);
37 button.click(MouseButton::Right);
38 button.click(MouseButton::Left);
39 button.click(MouseButton::Middle);
40 button.click(MouseButton::Left);
41
42 {
43 let _sub_all = all_clicks_count.subscribe(|count| {
44 assert_eq!(*count, 6);
45 println!("Counted 6 clicks");
46 });
47 let _sub_left = left_clicks_count.subscribe(|count| {
48 assert_eq!(*count, 4);
49 println!("Counted 4 left clicks");
50 });
51 button.click(MouseButton::Left);
52 }
53}