Module dharma::bridge [] [src]

Communication between two endpoints in different threads.

This module implements generic communication between two points (possibly two threads) in single-producer multi-consumer style. Sender constitutes input point while Receiver constitutes output point. Senders and Receivers can be freely binded with connect function, so single Sender may send to many Receivers and single Receiver may receive from many Senders.

For cases when it is needed to ensure that only one Receiver is connected one should use DirectSender instead of Sender.

Example

use dharma::{connect, Sender, Receiver, ReceiveResult};

#[derive(Clone, PartialEq, Debug)]
enum E { A, B, C, D }

let mut s1 = Sender::new();
let mut s2 = Sender::new();
let mut r1 = Receiver::new();
let mut r2 = Receiver::new();
connect(&mut s1, &r1);
connect(&mut s1, &r2);
connect(&mut s2, &r2);

std::thread::spawn(move || {
        s1.send_plain(E::A);
        s1.send_plain(E::B);
        s2.send_plain(E::C);
        s2.send_plain(E::D);
    });

assert!(r1.recv().is_plain(E::A));
assert!(r2.recv().is_plain(E::A));
assert!(r1.recv().is_plain(E::B));
assert!(r2.recv().is_plain(E::B));
assert!(r1.try_recv().is_empty());
assert!(r2.recv().is_plain(E::C));
assert!(r2.recv().is_plain(E::D));
assert!(r2.try_recv().is_empty());

Structs

DirectSender

Allows sending data to one Receiver.

Receiver

Allows receiving data from Senders.

Sender

Allows sending data to many Receivers.

Enums

ReceiveResult

Result returned from Receiver::recv, Receiver::try_recv or Receiver::recv_timeout.

SpecialCommand

Enumeration for special type of command.

Functions

connect

Connect given Sender to given Receiver. One can freely connect many Sender's to many Receiver's.

direct_connect

Connect given DirectSender to given Receiver. One can connect DirectSender to only one Receiver. If Sender already has a Receiver the connection will be overridden.

Type Definitions

SignalId

Type alias for signal IDs.