use tokio::sync::mpsc;
#[derive(Debug, Clone)]
pub struct BatchWorkItem {
pub job_id: String,
}
pub type BatchQueueSender = mpsc::Sender<BatchWorkItem>;
pub type BatchQueueReceiver = mpsc::Receiver<BatchWorkItem>;
pub fn new_batch_queue(capacity: usize) -> (BatchQueueSender, BatchQueueReceiver) {
mpsc::channel(capacity)
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn queue_send_and_receive() {
let (tx, mut rx) = new_batch_queue(8);
tx.send(BatchWorkItem {
job_id: "batch_123".to_string(),
})
.await
.expect("send should succeed");
let item = rx.recv().await.expect("recv should yield an item");
assert_eq!(item.job_id, "batch_123");
}
#[tokio::test]
async fn queue_closed_when_sender_dropped() {
let (tx, mut rx) = new_batch_queue(4);
drop(tx);
assert!(
rx.recv().await.is_none(),
"closed channel should yield None"
);
}
}