use async_trait::async_trait;
use crate::types::queues::{
BulkJob, BullMqError, EnqueueOptions, JobHandle, JobSnapshot, JobStateFilter, QueueChannel,
QueueCounts,
};
#[async_trait]
pub trait BullMqProvider: Send + Sync {
async fn enqueue(
&self,
queue: &QueueChannel,
job_name: &str,
payload: serde_json::Value,
options: Option<EnqueueOptions>,
) -> Result<JobHandle, BullMqError>;
async fn enqueue_bulk(
&self,
queue: &QueueChannel,
jobs: Vec<BulkJob>,
) -> Result<Vec<JobHandle>, BullMqError>;
async fn job_counts(&self, queue: &QueueChannel) -> Result<QueueCounts, BullMqError>;
async fn get_job(
&self,
queue: &QueueChannel,
job_id: &str,
) -> Result<Option<JobSnapshot>, BullMqError>;
async fn list_jobs(
&self,
queue: &QueueChannel,
state: JobStateFilter,
start: i64,
end: i64,
) -> Result<Vec<JobSnapshot>, BullMqError>;
async fn pause(&self, queue: &QueueChannel) -> Result<(), BullMqError>;
async fn resume(&self, queue: &QueueChannel) -> Result<(), BullMqError>;
async fn is_paused(&self, queue: &QueueChannel) -> Result<bool, BullMqError>;
async fn obliterate(&self, queue: &QueueChannel) -> Result<(), BullMqError>;
}