mpstthree/role/
end.rs

1//! This module contains the required definitions and
2//! functions for closing a stack.
3//! Its dual is it self.
4
5use crate::role::Role;
6use crossbeam_channel::{bounded, Receiver, Sender};
7
8/// This structure is used to close an ordering (stack).
9///
10/// # Example
11///
12/// ```
13/// use mpstthree::role::end::RoleEnd;
14/// use mpstthree::role::Role; // Only used for example
15///
16/// // Creating the binary sessions
17/// type Close = RoleEnd;
18///
19/// let _ = Close::new(); // Only used for example
20/// ```
21#[derive(Debug)]
22pub struct RoleEnd {
23    #[doc(hidden)]
24    pub sender: Sender<()>,
25    #[doc(hidden)]
26    pub receiver: Receiver<()>,
27}
28
29impl Role for RoleEnd {
30    type Dual = Self;
31
32    fn new() -> (Self, Self::Dual) {
33        let (sender1, receiver1) = bounded::<()>(1);
34        let (sender2, receiver2) = bounded::<()>(1);
35
36        (
37            RoleEnd {
38                sender: sender1,
39                receiver: receiver2,
40            },
41            RoleEnd {
42                sender: sender2,
43                receiver: receiver1,
44            },
45        )
46    }
47
48    fn head_str() -> String {
49        "RoleEnd".to_string()
50    }
51
52    fn tail_str() -> String {
53        "".to_string()
54    }
55
56    fn self_head_str(&self) -> String {
57        "RoleEnd".to_string()
58    }
59
60    fn self_tail_str(&self) -> String {
61        "".to_string()
62    }
63}