a3s_flow/worker/
memory.rs1use async_trait::async_trait;
2use std::collections::VecDeque;
3use tokio::sync::Mutex;
4use uuid::Uuid;
5
6use crate::error::Result;
7
8use super::{FlowTask, FlowTaskLease, FlowTaskQueue};
9
10#[derive(Debug, Default)]
12pub struct InMemoryFlowTaskQueue {
13 tasks: Mutex<VecDeque<FlowTask>>,
14}
15
16impl InMemoryFlowTaskQueue {
17 pub fn new() -> Self {
18 Self::default()
19 }
20}
21
22#[async_trait]
23impl FlowTaskQueue for InMemoryFlowTaskQueue {
24 async fn enqueue(&self, task: FlowTask) -> Result<()> {
25 self.tasks.lock().await.push_back(task);
26 Ok(())
27 }
28
29 async fn lease(&self) -> Result<Option<FlowTaskLease>> {
30 Ok(self
31 .tasks
32 .lock()
33 .await
34 .pop_front()
35 .map(|task| FlowTaskLease {
36 lease_id: Uuid::new_v4().to_string(),
37 task,
38 }))
39 }
40
41 async fn ack(&self, _lease_id: &str) -> Result<()> {
42 Ok(())
43 }
44
45 async fn len(&self) -> Result<usize> {
46 Ok(self.tasks.lock().await.len())
47 }
48}