use serde_json::Value;
use crate::Result;
use crate::future::BoxedFuture;
use crate::job::Job;
use crate::job_handle::JobHandle;
use crate::opts::EnqueueOpts;
pub trait Queue: Send + Sync {
fn name(&self) -> &str;
fn enqueue<'a>(&'a self, payload: Value, opts: EnqueueOpts) -> BoxedFuture<'a, Result<i64>>;
fn claim_one<'a>(
&'a self,
worker_id: &str,
) -> BoxedFuture<'a, Result<Option<Box<dyn JobHandle>>>>;
fn claim_batch<'a>(
&'a self,
worker_id: &str,
n: i64,
) -> BoxedFuture<'a, Result<Vec<Box<dyn JobHandle>>>>;
fn ack_batch<'a>(&'a self, ids: &[i64]) -> BoxedFuture<'a, Result<i64>>;
fn cancel<'a>(&'a self, job_id: i64) -> BoxedFuture<'a, Result<bool>>;
fn get_job<'a>(&'a self, job_id: i64) -> BoxedFuture<'a, Result<Option<Job>>>;
fn sweep_expired<'a>(&'a self) -> BoxedFuture<'a, Result<i64>>;
}