pgqrs 0.15.0

A high-performance PostgreSQL-backed job queue for Rust applications
Documentation
use crate::error::Result;
use crate::store::dialect::SqlDialect;
use crate::store::query::QueryBuilder;
use crate::types::StepRecord;
use async_trait::async_trait;

#[async_trait]
pub(crate) trait DialectStepTable: crate::store::StepRecordTable + Sync {
    type Dialect: SqlDialect;

    async fn dialect_acquire_step(&self, run_id: i64, step_name: &str) -> Result<StepRecord> {
        self.execute(
            QueryBuilder::new(Self::Dialect::STEP.acquire)
                .bind_i64(run_id)
                .bind_string(step_name.to_string()),
        )
        .await
    }

    async fn dialect_clear_retry(&self, id: i64) -> Result<StepRecord> {
        self.execute(QueryBuilder::new(Self::Dialect::STEP.clear_retry).bind_i64(id))
            .await
    }

    async fn dialect_complete_step(
        &self,
        id: i64,
        output: serde_json::Value,
    ) -> Result<StepRecord> {
        self.execute(
            QueryBuilder::new(Self::Dialect::STEP.complete)
                .bind_i64(id)
                .bind_json(output),
        )
        .await
    }

    async fn dialect_fail_step(
        &self,
        id: i64,
        error: serde_json::Value,
        retry_at: Option<chrono::DateTime<chrono::Utc>>,
        retry_count: i32,
    ) -> Result<StepRecord> {
        self.execute(
            QueryBuilder::new(Self::Dialect::STEP.fail)
                .bind_i64(id)
                .bind_json(error)
                .bind_datetime(retry_at)
                .bind_i32(retry_count),
        )
        .await
    }
}