kabu_core_actors/channels/
multiproducer.rs

1use std::sync::Arc;
2
3use tokio::sync::mpsc::error::SendError;
4use tokio::sync::mpsc::Receiver;
5use tokio::sync::{mpsc, Mutex};
6
7#[derive(Clone)]
8pub struct MultiProducer<T> {
9    receiver: Arc<Mutex<Receiver<T>>>,
10    sender: mpsc::Sender<T>,
11}
12
13impl<T: Send + 'static> MultiProducer<T> {
14    pub fn new(capacity: usize) -> Self {
15        let (sender, receiver) = mpsc::channel(capacity);
16        Self { receiver: Arc::new(Mutex::new(receiver)), sender }
17    }
18
19    pub async fn recv(&mut self) -> Option<T> {
20        self.receiver.lock().await.recv().await
21    }
22
23    pub async fn send(&self, value: T) -> Result<(), SendError<T>> {
24        self.sender.send(value).await
25    }
26}
27/*
28impl Clone for MultiProducer<T>
29where T : Send + 'static
30{
31    fn clone(&self) -> Self {
32        Self{
33            receiver : self.receiver.clone(),
34            sender : self.sender.clone()
35        }
36    }
37}
38 */