Expand description
Data flow between blocks
Note: This module still suffers some problems when a lot of values
(e.g. Chunk
s or Samples
) are sent at once (e.g. due to reducing the
chunk size) because there is currently no backpressure.
Example
The following toy example passes a String
from a Producer
to a
Consumer
. For radio applications, you will usually pass Samples
instead.
use radiorust::flow::*;
struct MySource {
sender: Sender<String>,
/* extra fields can go here */
}
impl Producer<String> for MySource {
fn connector(&self) -> SenderConnector<'_, String> {
self.sender.connector()
}
}
struct MySink {
receiver: Receiver<String>,
/* extra fields can go here */
}
impl Consumer<String> for MySink {
fn receiver(&self) -> &Receiver<String> {
&self.receiver
}
}
let src = MySource { sender: Sender::new() };
let dst = MySink { receiver: Receiver::new() };
dst.connect_to_producer(&src);
let mut stream: ReceiverStream<String> = dst.receiver.stream();
src.sender.send("Hello World!".to_string()).await;
assert_eq!(stream.recv().await.unwrap(), "Hello World!".to_string());
Structs
Handle that allows retrieving data from a
Receiver
Enums
Error value returned by
ReceiverStream::recv