bullrs 0.0.3

A BullMQ compatible Job Queue based on Redis
Documentation
use redis::RedisError;

use crate::{
    ProgressPercent,
    error::UpdateProgressError,
    luacommands::{InvokeLuaScript, UPDATE_PROGRESS},
    queue::QueueName,
};

pub struct UpdateProgess<'a> {
    pub queue: &'a QueueName,
    pub job_id: &'a str,
    pub progress: ProgressPercent,
}

impl<'a> InvokeLuaScript for UpdateProgess<'a> {
    type RedisOutput = i32;
    type DomainOk = ();
    type DomainErr = UpdateProgressError;

    fn generate_invocation(&self) -> Result<redis::ScriptInvocation<'static>, Self::DomainErr> {
        let mut invoc = UPDATE_PROGRESS.prepare_invoke();
        invoc
            .key(self.queue.job(self.job_id))
            .key(self.queue.events())
            .key(self.queue.meta())
            .arg(self.job_id)
            .arg(self.progress.into_inner());
        Ok(invoc)
    }

    fn map_value(&self, value: Self::RedisOutput) -> Result<Self::DomainOk, Self::DomainErr> {
        match value {
            0 => Ok(()),
            -1 => Err(UpdateProgressError::JobNotFound {
                job_id: self.job_id.into(),
                queue_name: self.queue.clone(),
            }),
            _x => panic!("Script should never return that value"),
        }
    }

    fn map_redis_error(&self, error: RedisError) -> Self::DomainErr {
        error.into()
    }
}