Function mpstthree::functionmpst::send::send_mpst_b_to_a

source ·
pub fn send_mpst_b_to_a<T, S1, S2, R>(
    x: T,
    s: MeshedChannels<Send<T, S1>, S2, RoleA<R>, NameB>
) -> MeshedChannels<S1, S2, R, NameB>
where T: Send, S1: Session, S2: Session, R: Role,
Expand description

Send a value of type T from B to A. Always succeeds. Returns the continuation of the MeshedChannels<S1, S2, R, N>.

§Example

use mpstthree::binary::struct_trait::{end::End, send::Send, session::Session};
use mpstthree::meshedchannels::MeshedChannels;
use mpstthree::name::Name;
use mpstthree::role::Role;

use mpstthree::role::a::RoleA;
use mpstthree::role::end::RoleEnd;

use mpstthree::name::b::NameB;

use mpstthree::functionmpst::send::send_mpst_b_to_a;

// Creating the binary sessions
type BtoA<N> = Send<N, End>;
type BtoC = End;

// Stack
type StackB = RoleA<RoleEnd>;

// From this point...

let (channel_ba, _) = BtoA::<i32>::new();
let (channel_bc, _) = BtoC::new();

let (role_b, _) = StackB::new();

let (name_b, _) = NameB::new();

let sess = MeshedChannels {
    session1: channel_ba,
    session2: channel_bc,
    stack: role_b,
    name: name_b,
};

// ...to this point, should not be written in general. Please look at the *fork* function.

let _s = send_mpst_b_to_a(1, sess);