#[macro_export]
#[doc(hidden)]
macro_rules! create_choose_from_1_to_2_3 {
(
$session_1:ty,
$session_2:ty,
$session_3:ty,
$role_1:ty,
$role_2:ty,
$role_3:ty,
$name_receiver_1:ident,
$name_receiver_2:ident,
$name_sender:ident,
$session:expr,
$pat:path
) => {{
let (session_1_2, session_2_1) =
<$session_1 as mpstthree::binary::struct_trait::session::Session>::new();
let (session_1_3, session_3_1) =
<$session_2 as mpstthree::binary::struct_trait::session::Session>::new();
let (session_3_2, session_2_3) =
<$session_3 as mpstthree::binary::struct_trait::session::Session>::new();
let (_, role_1) = <$role_1 as mpstthree::role::Role>::new();
let (_, role_2) = <$role_2 as mpstthree::role::Role>::new();
let (role_3, _) = <$role_3 as mpstthree::role::Role>::new();
let (name_1, _) = <$name_receiver_1 as mpstthree::name::Name>::new();
let (name_2, _) = <$name_receiver_2 as mpstthree::name::Name>::new();
let (name_3, _) = <$name_sender as mpstthree::name::Name>::new();
let choice_1 = mpstthree::meshedchannels::MeshedChannels {
session1: session_2_1,
session2: session_2_3,
stack: role_1,
name: name_1,
};
let choice_2 = mpstthree::meshedchannels::MeshedChannels {
session1: session_3_1,
session2: session_3_2,
stack: role_2,
name: name_2,
};
let new_session_1 = mpstthree::binary::send::send($pat(choice_1), $session.session1);
let new_session_2 = mpstthree::binary::send::send($pat(choice_2), $session.session2);
let s = mpstthree::meshedchannels::MeshedChannels {
session1: new_session_1,
session2: new_session_2,
stack: $session.stack,
name: $session.name,
};
mpstthree::binary::cancel::cancel(s);
mpstthree::meshedchannels::MeshedChannels {
session1: session_1_2,
session2: session_1_3,
stack: role_3,
name: name_3,
}
}};
}
#[macro_export]
#[doc(hidden)]
macro_rules! create_choose_from_2_to_1_3 {
(
$session_1:ty,
$session_2:ty,
$session_3:ty,
$role_1:ty,
$role_2:ty,
$role_3:ty,
$name_receiver_1:ident,
$name_receiver_2:ident,
$name_sender:ident,
$session:expr,
$pat:path
) => {{
let (session_2_1, session_1_2) =
<$session_1 as mpstthree::binary::struct_trait::session::Session>::new();
let (session_2_3, session_3_2) =
<$session_2 as mpstthree::binary::struct_trait::session::Session>::new();
let (session_3_1, session_1_3) =
<$session_3 as mpstthree::binary::struct_trait::session::Session>::new();
let (_, role_1) = <$role_1 as mpstthree::role::Role>::new();
let (_, role_2) = <$role_2 as mpstthree::role::Role>::new();
let (role_3, _) = <$role_3 as mpstthree::role::Role>::new();
let (name_1, _) = <$name_receiver_1 as mpstthree::name::Name>::new();
let (name_2, _) = <$name_receiver_2 as mpstthree::name::Name>::new();
let (name_3, _) = <$name_sender as mpstthree::name::Name>::new();
let choice_1 = mpstthree::meshedchannels::MeshedChannels {
session1: session_1_2,
session2: session_1_3,
stack: role_1,
name: name_1,
};
let choice_2 = mpstthree::meshedchannels::MeshedChannels {
session1: session_3_1,
session2: session_3_2,
stack: role_2,
name: name_2,
};
let new_session_1 = mpstthree::binary::send::send($pat(choice_1), $session.session1);
let new_session_2 = mpstthree::binary::send::send($pat(choice_2), $session.session2);
let s = mpstthree::meshedchannels::MeshedChannels {
session1: new_session_1,
session2: new_session_2,
stack: $session.stack,
name: $session.name,
};
mpstthree::binary::cancel::cancel(s);
mpstthree::meshedchannels::MeshedChannels {
session1: session_2_1,
session2: session_2_3,
stack: role_3,
name: name_3,
}
}};
}
#[macro_export]
#[doc(hidden)]
macro_rules! create_choose_from_3_to_1_2 {
(
$session_1:ty,
$session_2:ty,
$session_3:ty,
$role_1:ty,
$role_2:ty,
$role_3:ty,
$name_receiver_1:ident,
$name_receiver_2:ident,
$name_sender:ident,
$session:expr,
$pat:path
) => {{
let (session_3_1, session_1_3) =
<$session_1 as mpstthree::binary::struct_trait::session::Session>::new();
let (session_3_2, session_2_3) =
<$session_2 as mpstthree::binary::struct_trait::session::Session>::new();
let (session_2_1, session_1_2) =
<$session_3 as mpstthree::binary::struct_trait::session::Session>::new();
let (_, role_1) = <$role_1 as mpstthree::role::Role>::new();
let (_, role_2) = <$role_2 as mpstthree::role::Role>::new();
let (role_3, _) = <$role_3 as mpstthree::role::Role>::new();
let (name_1, _) = <$name_receiver_1 as mpstthree::name::Name>::new();
let (name_2, _) = <$name_receiver_2 as mpstthree::name::Name>::new();
let (name_3, _) = <$name_sender as mpstthree::name::Name>::new();
let choice_1 = mpstthree::meshedchannels::MeshedChannels {
session1: session_1_2,
session2: session_1_3,
stack: role_1,
name: name_1,
};
let choice_2 = mpstthree::meshedchannels::MeshedChannels {
session1: session_2_1,
session2: session_2_3,
stack: role_2,
name: name_2,
};
let new_session_1 = mpstthree::binary::send::send($pat(choice_1), $session.session1);
let new_session_2 = mpstthree::binary::send::send($pat(choice_2), $session.session2);
let s = mpstthree::meshedchannels::MeshedChannels {
session1: new_session_1,
session2: new_session_2,
stack: $session.stack,
name: $session.name,
};
mpstthree::binary::cancel::cancel(s);
mpstthree::meshedchannels::MeshedChannels {
session1: session_3_1,
session2: session_3_2,
stack: role_3,
name: name_3,
}
}};
}
#[macro_export]
#[cfg_attr(doc_cfg, doc(cfg(feature = "macros_simple")))]
macro_rules! create_choose_right_from_3_to_1_and_2 {
(
$func_name:ident,
$name_receiver_1:ident,
$name_receiver_2:ident,
$role_broadcast:ident,
$name_sender:ident
) => {
fn $func_name<'a, S0, S1, S2, S3, S4, S5, R0, R1, R2, R3, R4, R5>(
s: mpstthree::meshedchannels::MeshedChannels<
mpstthree::functionmpst::ChooseMpst<S0, S2, S1, S4, R0, R1, $name_receiver_1>,
mpstthree::functionmpst::ChooseMpst<
<S0 as mpstthree::binary::struct_trait::session::Session>::Dual,
S3,
<S1 as mpstthree::binary::struct_trait::session::Session>::Dual,
S5,
R2,
R3,
$name_receiver_2,
>,
$role_broadcast<R4, R5>,
$name_sender,
>,
) -> mpstthree::meshedchannels::MeshedChannels<S4, S5, R5, $name_sender>
where
S0: mpstthree::binary::struct_trait::session::Session + 'a,
S1: mpstthree::binary::struct_trait::session::Session + 'a,
S2: mpstthree::binary::struct_trait::session::Session + 'a,
S3: mpstthree::binary::struct_trait::session::Session + 'a,
S4: mpstthree::binary::struct_trait::session::Session + 'a,
S5: mpstthree::binary::struct_trait::session::Session + 'a,
R0: mpstthree::role::Role + 'a,
R1: mpstthree::role::Role + 'a,
R2: mpstthree::role::Role + 'a,
R3: mpstthree::role::Role + 'a,
R4: mpstthree::role::Role + 'a,
R5: mpstthree::role::Role + 'a,
{
mpstthree::create_choose_from_3_to_1_2!(
S4,
S5,
S1,
R1,
R3,
R5,
$name_receiver_1,
$name_receiver_2,
$name_sender,
s,
either::Either::Right
)
}
};
}
#[macro_export]
#[cfg_attr(doc_cfg, doc(cfg(feature = "macros_simple")))]
macro_rules! create_choose_left_from_3_to_1_and_2 {
(
$func_name:ident,
$name_receiver_1:ident,
$name_receiver_2:ident,
$role_broadcast:ident,
$name_sender:ident
) => {
fn $func_name<'a, S0, S1, S2, S3, S4, S5, R0, R1, R2, R3, R4, R5>(
s: mpstthree::meshedchannels::MeshedChannels<
mpstthree::functionmpst::ChooseMpst<S0, S2, S1, S4, R0, R1, $name_receiver_1>,
mpstthree::functionmpst::ChooseMpst<
<S0 as mpstthree::binary::struct_trait::session::Session>::Dual,
S3,
<S1 as mpstthree::binary::struct_trait::session::Session>::Dual,
S5,
R2,
R3,
$name_receiver_2,
>,
$role_broadcast<R4, R5>,
$name_sender,
>,
) -> mpstthree::meshedchannels::MeshedChannels<S2, S3, R4, $name_sender>
where
S0: mpstthree::binary::struct_trait::session::Session + 'a,
S1: mpstthree::binary::struct_trait::session::Session + 'a,
S2: mpstthree::binary::struct_trait::session::Session + 'a,
S3: mpstthree::binary::struct_trait::session::Session + 'a,
S4: mpstthree::binary::struct_trait::session::Session + 'a,
S5: mpstthree::binary::struct_trait::session::Session + 'a,
R0: mpstthree::role::Role + 'a,
R1: mpstthree::role::Role + 'a,
R2: mpstthree::role::Role + 'a,
R3: mpstthree::role::Role + 'a,
R4: mpstthree::role::Role + 'a,
R5: mpstthree::role::Role + 'a,
{
mpstthree::create_choose_from_3_to_1_2!(
S2,
S3,
S0,
R0,
R2,
R4,
$name_receiver_1,
$name_receiver_2,
$name_sender,
s,
either::Either::Left
)
}
};
}
#[macro_export]
#[cfg_attr(doc_cfg, doc(cfg(feature = "macros_simple")))]
macro_rules! create_choose_left_from_1_to_2_and_3 {
(
$func_name:ident,
$name_receiver_1:ident,
$name_receiver_2:ident,
$role_broadcast:ident,
$name_sender:ident
) => {
fn $func_name<'a, S0, S1, S2, S3, S4, S5, R0, R1, R2, R3, R4, R5>(
s: mpstthree::meshedchannels::MeshedChannels<
mpstthree::functionmpst::ChooseMpst<S2, S0, S4, S1, R0, R1, $name_receiver_1>,
mpstthree::functionmpst::ChooseMpst<
S3,
<S0 as mpstthree::binary::struct_trait::session::Session>::Dual,
S5,
<S1 as mpstthree::binary::struct_trait::session::Session>::Dual,
R2,
R3,
$name_receiver_2,
>,
$role_broadcast<R4, R5>,
$name_sender,
>,
) -> mpstthree::meshedchannels::MeshedChannels<S2, S3, R4, $name_sender>
where
S0: mpstthree::binary::struct_trait::session::Session + 'a,
S1: mpstthree::binary::struct_trait::session::Session + 'a,
S2: mpstthree::binary::struct_trait::session::Session + 'a,
S3: mpstthree::binary::struct_trait::session::Session + 'a,
S4: mpstthree::binary::struct_trait::session::Session + 'a,
S5: mpstthree::binary::struct_trait::session::Session + 'a,
R0: mpstthree::role::Role + 'a,
R1: mpstthree::role::Role + 'a,
R2: mpstthree::role::Role + 'a,
R3: mpstthree::role::Role + 'a,
R4: mpstthree::role::Role + 'a,
R5: mpstthree::role::Role + 'a,
{
mpstthree::create_choose_from_1_to_2_3!(
S2,
S3,
S0,
R0,
R2,
R4,
$name_receiver_1,
$name_receiver_2,
$name_sender,
s,
either::Either::Left
)
}
};
}
#[macro_export]
#[cfg_attr(doc_cfg, doc(cfg(feature = "macros_simple")))]
macro_rules! create_choose_right_from_1_to_2_and_3 {
(
$func_name:ident,
$name_receiver_1:ident,
$name_receiver_2:ident,
$role_broadcast:ident,
$name_sender:ident
) => {
fn $func_name<'a, S0, S1, S2, S3, S4, S5, R0, R1, R2, R3, R4, R5>(
s: mpstthree::meshedchannels::MeshedChannels<
mpstthree::functionmpst::ChooseMpst<S2, S0, S4, S1, R0, R1, $name_receiver_1>,
mpstthree::functionmpst::ChooseMpst<
S3,
<S0 as mpstthree::binary::struct_trait::session::Session>::Dual,
S5,
<S1 as mpstthree::binary::struct_trait::session::Session>::Dual,
R2,
R3,
$name_receiver_2,
>,
$role_broadcast<R4, R5>,
$name_sender,
>,
) -> mpstthree::meshedchannels::MeshedChannels<S4, S5, R5, $name_sender>
where
S0: mpstthree::binary::struct_trait::session::Session + 'a,
S1: mpstthree::binary::struct_trait::session::Session + 'a,
S2: mpstthree::binary::struct_trait::session::Session + 'a,
S3: mpstthree::binary::struct_trait::session::Session + 'a,
S4: mpstthree::binary::struct_trait::session::Session + 'a,
S5: mpstthree::binary::struct_trait::session::Session + 'a,
R0: mpstthree::role::Role + 'a,
R1: mpstthree::role::Role + 'a,
R2: mpstthree::role::Role + 'a,
R3: mpstthree::role::Role + 'a,
R4: mpstthree::role::Role + 'a,
R5: mpstthree::role::Role + 'a,
{
mpstthree::create_choose_from_1_to_2_3!(
S4,
S5,
S1,
R1,
R3,
R5,
$name_receiver_1,
$name_receiver_2,
$name_sender,
s,
either::Either::Right
)
}
};
}
#[macro_export]
#[cfg_attr(doc_cfg, doc(cfg(feature = "macros_simple")))]
macro_rules! create_choose_left_from_2_to_1_and_3 {
(
$func_name:ident,
$name_receiver_1:ident,
$name_receiver_2:ident,
$role_broadcast:ident,
$name_sender:ident
) => {
fn $func_name<'a, S0, S1, S2, S3, S4, S5, R0, R1, R2, R3, R4, R5>(
s: mpstthree::meshedchannels::MeshedChannels<
mpstthree::functionmpst::ChooseMpst<S2, S0, S4, S1, R0, R1, $name_receiver_1>,
mpstthree::functionmpst::ChooseMpst<
<S0 as mpstthree::binary::struct_trait::session::Session>::Dual,
S3,
<S1 as mpstthree::binary::struct_trait::session::Session>::Dual,
S5,
R2,
R3,
$name_receiver_2,
>,
$role_broadcast<R4, R5>,
$name_sender,
>,
) -> mpstthree::meshedchannels::MeshedChannels<S2, S3, R4, $name_sender>
where
S0: mpstthree::binary::struct_trait::session::Session + 'a,
S1: mpstthree::binary::struct_trait::session::Session + 'a,
S2: mpstthree::binary::struct_trait::session::Session + 'a,
S3: mpstthree::binary::struct_trait::session::Session + 'a,
S4: mpstthree::binary::struct_trait::session::Session + 'a,
S5: mpstthree::binary::struct_trait::session::Session + 'a,
R0: mpstthree::role::Role + 'a,
R1: mpstthree::role::Role + 'a,
R2: mpstthree::role::Role + 'a,
R3: mpstthree::role::Role + 'a,
R4: mpstthree::role::Role + 'a,
R5: mpstthree::role::Role + 'a,
{
mpstthree::create_choose_from_2_to_1_3!(
S2,
S3,
S0,
R0,
R2,
R4,
$name_receiver_1,
$name_receiver_2,
$name_sender,
s,
either::Either::Left
)
}
};
}
#[macro_export]
#[cfg_attr(doc_cfg, doc(cfg(feature = "macros_simple")))]
macro_rules! create_choose_right_from_2_to_1_and_3 {
(
$func_name:ident,
$name_receiver_1:ident,
$name_receiver_2:ident,
$role_broadcast:ident,
$name_sender:ident
) => {
fn $func_name<'a, S0, S1, S2, S3, S4, S5, R0, R1, R2, R3, R4, R5>(
s: mpstthree::meshedchannels::MeshedChannels<
mpstthree::functionmpst::ChooseMpst<S2, S0, S4, S1, R0, R1, $name_receiver_1>,
mpstthree::functionmpst::ChooseMpst<
<S0 as mpstthree::binary::struct_trait::session::Session>::Dual,
S3,
<S1 as mpstthree::binary::struct_trait::session::Session>::Dual,
S5,
R2,
R3,
$name_receiver_2,
>,
$role_broadcast<R4, R5>,
$name_sender,
>,
) -> mpstthree::meshedchannels::MeshedChannels<S4, S5, R5, $name_sender>
where
S0: mpstthree::binary::struct_trait::session::Session + 'a,
S1: mpstthree::binary::struct_trait::session::Session + 'a,
S2: mpstthree::binary::struct_trait::session::Session + 'a,
S3: mpstthree::binary::struct_trait::session::Session + 'a,
S4: mpstthree::binary::struct_trait::session::Session + 'a,
S5: mpstthree::binary::struct_trait::session::Session + 'a,
R0: mpstthree::role::Role + 'a,
R1: mpstthree::role::Role + 'a,
R2: mpstthree::role::Role + 'a,
R3: mpstthree::role::Role + 'a,
R4: mpstthree::role::Role + 'a,
R5: mpstthree::role::Role + 'a,
{
mpstthree::create_choose_from_2_to_1_3!(
S4,
S5,
S1,
R1,
R3,
R5,
$name_receiver_1,
$name_receiver_2,
$name_sender,
s,
either::Either::Right
)
}
};
}
#[macro_export]
#[cfg_attr(doc_cfg, doc(cfg(feature = "macros_simple")))]
macro_rules! create_choose_both_from_2_to_1_and_3 {
(
$func_name_right:ident,
$func_name_left:ident,
$name_receiver_1:ident,
$name_receiver_2:ident,
$role_broadcast:ident,
$name_sender:ident
) => {
mpstthree::create_choose_right_from_2_to_1_and_3!(
$func_name_right,
$name_receiver_1,
$name_receiver_2,
$role_broadcast,
$name_sender
);
mpstthree::create_choose_left_from_2_to_1_and_3!(
$func_name_left,
$name_receiver_1,
$name_receiver_2,
$role_broadcast,
$name_sender
);
};
}
#[macro_export]
#[cfg_attr(doc_cfg, doc(cfg(feature = "macros_simple")))]
macro_rules! create_choose_both_from_1_to_2_and_3 {
(
$func_name_right:ident,
$func_name_left:ident,
$name_receiver_1:ident,
$name_receiver_2:ident,
$role_broadcast:ident,
$name_sender:ident
) => {
mpstthree::create_choose_right_from_1_to_2_and_3!(
$func_name_right,
$name_receiver_1,
$name_receiver_2,
$role_broadcast,
$name_sender
);
mpstthree::create_choose_left_from_1_to_2_and_3!(
$func_name_left,
$name_receiver_1,
$name_receiver_2,
$role_broadcast,
$name_sender
);
};
}
#[macro_export]
#[cfg_attr(doc_cfg, doc(cfg(feature = "macros_simple")))]
macro_rules! create_choose_both_from_3_to_1_and_2 {
(
$func_name_right:ident,
$func_name_left:ident,
$name_receiver_1:ident,
$name_receiver_2:ident,
$role_broadcast:ident,
$name_sender:ident
) => {
mpstthree::create_choose_right_from_3_to_1_and_2!(
$func_name_right,
$name_receiver_1,
$name_receiver_2,
$role_broadcast,
$name_sender
);
mpstthree::create_choose_left_from_3_to_1_and_2!(
$func_name_left,
$name_receiver_1,
$name_receiver_2,
$role_broadcast,
$name_sender
);
};
}
#[macro_export]
#[cfg_attr(doc_cfg, doc(cfg(feature = "macros_simple")))]
macro_rules! choose_mpst_to_all {
(
$session: expr ,
$( $label: path , )+ =>
$name_sender: ident
) => {{
use mpstthree::meshedchannels::MeshedChannels;
mpstthree::choose_mpst_multi_to_all!(
$session ,
$( $label , )+ =>
$name_sender,
MeshedChannels,
3
)
}};
}