use std::sync::Arc;
mod builder;
mod handler_api;
mod job_api;
mod logic;
mod workers_api;
use crate::handler;
use crate::sync::{self, BackoffStrategy};
use dashmap::DashMap;
use sqlx::PgPool;
use tokio::sync::Semaphore;
pub struct SimpleQueue {
pool: PgPool,
job_registry: DashMap<&'static str, Arc<dyn handler::DynJobHandler>>,
global_semaphore: Arc<Semaphore>,
queue_strategies: DashMap<String, Arc<dyn sync::JobStrategy>>,
queue_semaphores: DashMap<String, Arc<Semaphore>>,
queue_sem_count: usize,
heartbeat_interval: tokio::time::Duration,
default_backoff_strategy: BackoffStrategy,
default_queue_strategy: Arc<dyn sync::JobStrategy>,
queue_backoff_strategies: DashMap<String, BackoffStrategy>,
empty_poll_sleep: tokio::time::Duration,
max_reprocess_count: usize,
janitor_interval: tokio::time::Duration,
hold_queue_semaphore: tokio::time::Duration,
}