redis-queue-rs 0.1.7

Redis Queue with sync and async support for Rust
Documentation
use crate::queue_lock::async_queue_lock::AsyncQueueLock;
use crate::queue_lock::queue_lock::QueueLock;

#[derive(Clone)]
pub struct QueueLockBuilder {
    queue_name: Option<String>,
    redis_client: Option<redis::Client>,
    retry_interval: Option<u64>,
}

impl QueueLockBuilder {
    pub fn default() -> Self {
        QueueLockBuilder {
            queue_name: None,
            redis_client: None,
            retry_interval: None,
        }
    }

    pub fn with_queue_name(mut self, queue_name: String) -> Self {
        self.queue_name = Some(queue_name);
        self
    }

    pub fn with_redis_client(mut self, redis_client: redis::Client) -> Self {
        self.redis_client = Some(redis_client);
        self
    }

    pub fn with_retry_interval(mut self, retry_interval: u64) -> Self {
        self.retry_interval = Some(retry_interval);
        self
    }

    pub fn build(self) -> QueueLock {
        if self.redis_client.is_none() {
            panic!("Redis Client is required to build QueueLock");
        }

        return QueueLock::new(
            self.queue_name.unwrap(),
            self.redis_client.unwrap().get_connection().unwrap(),
            self.retry_interval,
        );
    }

    pub async fn async_build(self) -> AsyncQueueLock {
        if self.redis_client.is_none() {
            panic!("Redis Client is required to build AsyncQueueLock");
        }

        return AsyncQueueLock::new(
            self.queue_name.unwrap(),
            self.redis_client
                .unwrap()
                .get_multiplexed_async_connection()
                .await
                .unwrap(),
            self.retry_interval,
        );
    }
}