oxillama_server/batch_spool/
queue.rs1use tokio::sync::mpsc;
9
10#[derive(Debug, Clone)]
12pub struct BatchWorkItem {
13 pub job_id: String,
15}
16
17pub type BatchQueueSender = mpsc::Sender<BatchWorkItem>;
19
20pub type BatchQueueReceiver = mpsc::Receiver<BatchWorkItem>;
22
23pub fn new_batch_queue(capacity: usize) -> (BatchQueueSender, BatchQueueReceiver) {
25 mpsc::channel(capacity)
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[tokio::test]
33 async fn queue_send_and_receive() {
34 let (tx, mut rx) = new_batch_queue(8);
35 tx.send(BatchWorkItem {
36 job_id: "batch_123".to_string(),
37 })
38 .await
39 .expect("send should succeed");
40
41 let item = rx.recv().await.expect("recv should yield an item");
42 assert_eq!(item.job_id, "batch_123");
43 }
44
45 #[tokio::test]
46 async fn queue_closed_when_sender_dropped() {
47 let (tx, mut rx) = new_batch_queue(4);
48 drop(tx);
49 assert!(
50 rx.recv().await.is_none(),
51 "closed channel should yield None"
52 );
53 }
54}