use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum WorkItemState {
Pending,
Claimed,
Completed,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WorkItem {
pub id: Uuid,
pub queue: String,
pub body: String,
pub state: WorkItemState,
pub claimed_by: Option<String>,
}
pub trait ClaimPort: Send + Sync {
type Error: std::error::Error + Send + Sync + 'static;
fn enqueue(&self, queue: &str, body: &str) -> Result<Uuid, Self::Error>;
fn claim_next(&self, queue: &str, worker_id: &str) -> Result<Option<WorkItem>, Self::Error>;
fn is_near_duplicate(&self, queue: &str, body: &str) -> Result<bool, Self::Error>;
}