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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
//! This module contains the macros
//! for creating receive functions for any number
//! of participants.
//!
//! *This module is available only if MultiCrusty is built with
//! the `"macros_multiple"` feature.*
/// Creates a *recv* function to receive from a simple role on a given binary session type of a
/// MeshedChannels.
///
/// # Arguments
///
/// * The name of the new *recv* function
/// * The name of the sender
/// * The name of the receiver
/// * The name of the *MeshedChannels* type that will be used
/// * The number of participants (all together)
/// * The index of the binary session type that will receive in the MeshedChannels for this specific
/// role. Index starts at 1.
///
/// # Example
///
/// ```
/// use mpstthree::{create_multiple_normal_role, create_recv_mpst_session, create_meshedchannels};
///
/// create_multiple_normal_role!(
/// RoleA, RoleADual |
/// RoleB, RoleBDual |
/// RoleD, RoleDDual |
/// );
///
/// create_meshedchannels!(MeshedChannels, 3);
///
/// create_recv_mpst_session!(recv_mpst_d_from_a, RoleA, RoleD, MeshedChannels, 3, 1);
/// ```
///
/// *This macro is available only if MultiCrusty is built with
/// the `"macros_multiple"` feature.*
#[macro_export]
#[cfg_attr(doc_cfg, doc(cfg(feature = "macros_multiple")))]
macro_rules! create_recv_mpst_session {
(
$func_name:ident,
$sender:ident,
$receiver:ident,
$meshedchannels_name:ident,
$n_sessions:literal,
$exclusion:literal
) => {
mpst_seq::create_recv_mpst_session!(
$func_name,
$sender,
$receiver,
$meshedchannels_name,
$n_sessions,
$exclusion
);
};
}
/// Creates multiple *recv* functions to receive from a simple role on a given binary session type
/// of a MeshedChannels.
///
/// # Arguments
///
/// * The name of the new *recv* functions
/// * The name of the senders
/// * The name of the receiver
/// * The index of the binary session types that will receive in the MeshedChannels for each
/// specific role. Index starts at 1.
/// * The name of the *MeshedChannels* type that will be used
/// * The number of participants (all together)
///
/// # Example
///
/// ```
/// use mpstthree::{create_multiple_normal_role, create_meshedchannels, create_recv_mpst_session_bundle};
///
/// create_multiple_normal_role!(
/// RoleA, RoleADual |
/// RoleB, RoleBDual |
/// RoleD, RoleDDual |
/// );
///
/// create_meshedchannels!(MeshedChannels, 3);
///
///
/// create_recv_mpst_session_bundle!(
/// recv_mpst_d_from_a,
/// RoleA,
/// 1 |
/// recv_mpst_d_from_b,
/// RoleB,
/// 2 | =>
/// RoleD,
/// MeshedChannels,
/// 3
/// );
/// ```
///
/// *This macro is available only if MultiCrusty is built with
/// the `"macros_multiple"` feature.*
#[macro_export]
#[cfg_attr(doc_cfg, doc(cfg(feature = "macros_multiple")))]
macro_rules! create_recv_mpst_session_bundle {
($( $func_name: ident, $sender: ident, $exclusion: literal | )+ => $receiver: ident, $meshedchannels_name: ident, $n_sessions: literal) => {
$(
mpstthree::create_recv_mpst_session!(
$func_name,
$sender,
$receiver,
$meshedchannels_name,
$n_sessions,
$exclusion
);
)+
}
}