Macro mpstthree::choose_mpst_multi_cancel_to_all[][src]

macro_rules! choose_mpst_multi_cancel_to_all {
    ($session : expr, $($label : path,) + => $($receiver : ident,) + =>
 $broadcaster : ident, $sender : ident, $meshedchannels_name : ident,
 $exclusion : literal) => { ... };
}
This is supported on crate feature macros_multiple only.
Expand description

Choose among different sessions that are provided, may fail because of a canceled session. Need to exclude the first participant

Arguments

  • The session to be used
  • The different enum variants which represent the different branches to be sent to each passive role
  • The different passive roles
  • The name of the sender
  • The name of the MeshedChannels type that will be used
  • The index of the active role

Example

Available on the cancel/cancel_10 test.

match xs.pop() {
   Option::Some(_) => {
       let s = choose_mpst_multi_cancel_to_all!(
           s,
           CBranchesBtoC::Video, =>
           RoleA,
           RoleB, =>
           RoleD,
           MeshedChannels,
           3
       );
       let s = send_mpst_d_to_a(1, s);
       let (_, s) = recv_mpst_d_from_a(s)?;
       client_recurs(s, xs, index + 1)
   }
   Option::None => {
       let s = choose_mpst_multi_cancel_to_all!(
           s,
           CBranchesBtoC::End, =>
           RoleA,
           RoleB, =>
           RoleD,
           MeshedChannels,
           3
       );
       close_mpst_multi(s)
   }
}

Compile fail

Available on the cancel/cancel_8 test.

use mpstthree::{create_multiple_normal_role, choose_mpst_multi_cancel_to_all};

create_multiple_normal_role!(
    RoleA, RoleADual |
    RoleB, RoleBDual |
    RoleD, RoleDDual |
);

bundle_struct_fork_close_multi!(close_mpst, fork_mpst, MeshedChannels, 3);

match xs.pop() {
   Option::Some(_) => {
       let s = choose_mpst_multi_cancel_to_all!(
           s,
           CBranchesAtoC::Video,
           CBranchesBtoC::Video, =>
           RoleA,
           RoleB, =>
           RoleD,
           MeshedChannels,
           3
       );
       client_recurs(s, xs, index + 1)
   }
   Option::None => {
       let s = choose_mpst_multi_cancel_to_all!(
           s,
           CBranchesAtoC::End,
           CBranchesBtoC::End, =>
           RoleA,
           RoleB, =>
           RoleD,
           MeshedChannels,
           3
       );
       close_mpst_multi(s)
   }
}

This macro is available only if MultiCrusty is built with the "macros_multiple" feature.