1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//! This module contains the *close* function
use crateEnd;
use crateSignal;
use crateMeshedChannels;
use crateName;
use crateRoleEnd;
use Error;
/// Closes a [`MeshedChannels`].
///
/// Synchronises with all partners, and fails if one of the partners has
/// crashed.
///
/// # Example
///
/// ```
/// use mpstthree::binary::struct_trait::{end::End, session::Session};
/// use mpstthree::meshedchannels::MeshedChannels;
/// use mpstthree::name::Name;
/// use mpstthree::role::Role;
///
/// use mpstthree::role::end::RoleEnd;
///
/// use mpstthree::name::a::NameA;
///
/// use mpstthree::functionmpst::close::close_mpst;
///
/// // Creating the binary sessions
/// type AtoB = End;
/// type AtoC = End;
///
/// // Stack
/// type StackA = RoleEnd;
///
/// // From this point...
///
/// let (channel_ab, _) = AtoB::new();
/// let (channel_ac, _) = AtoC::new();
///
/// let (role_a, _) = StackA::new();
///
/// let (name_a, _) = NameA::new();
///
/// let sess = MeshedChannels {
/// session1: channel_ab,
/// session2: channel_ac,
/// stack: role_a,
/// name: name_a,
/// };
///
/// // ...to this point, should not be written in general. Please look at the *fork* function.
///
/// let _s = close_mpst(sess);
/// ```
///
/// [`MeshedChannels`]: crate::meshedchannels::MeshedChannels