Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-stream/src/async_primitives/oneshot_channel.rs
7884 views
1
use crate::async_primitives::connector;
2
3
pub fn channel<T>() -> (Sender<T>, Receiver<T>) {
4
let (tx, rx) = connector::connector();
5
(Sender { inner: tx }, Receiver { inner: rx })
6
}
7
8
pub struct Sender<T> {
9
inner: connector::Sender<T>,
10
}
11
12
impl<T: Send> Sender<T> {
13
pub fn send(mut self, value: T) -> Result<(), connector::SendError<T>> {
14
self.inner.try_send(value)
15
}
16
}
17
18
pub struct Receiver<T> {
19
inner: connector::Receiver<T>,
20
}
21
22
impl<T: Send> Receiver<T> {
23
pub async fn recv(mut self) -> Result<T, ()> {
24
self.inner.recv().await
25
}
26
}
27
28