mod basics;
mod flowjob;
mod getset;
mod name;
use std::{fmt::Debug, marker::PhantomData, sync::Arc};
use deadpool_redis::Pool;
use serde::de::DeserializeOwned;
use crate::event_system::EventSystem;
pub use flowjob::PreparedFlowJob;
pub use name::{InvalidQueueName, QueueName};
pub struct Queue<D, R: Debug + Clone> {
name: QueueName,
pool: Pool,
event_system: Arc<EventSystem<R>>,
phantom: PhantomData<D>,
}
impl<D, R: Debug + Clone> Clone for Queue<D, R> {
fn clone(&self) -> Self {
Self {
name: self.name.clone(),
pool: self.pool.clone(),
event_system: self.event_system.clone(),
phantom: PhantomData,
}
}
}
impl<D, R> Queue<D, R>
where
R: Debug + Clone + Send + DeserializeOwned + 'static,
{
pub fn new(pool: Pool, name: QueueName) -> Self {
let event_system = Arc::new(EventSystem::new(pool.clone(), name.clone()));
Self {
name,
pool,
event_system,
phantom: PhantomData,
}
}
pub fn name(&self) -> &QueueName {
&self.name
}
}