kabu_core_actors/channels/
multiproducer.rs1use 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