apalis-postgres 1.0.0-rc.9

Background task processing for rust using apalis and postgres
Documentation
use apalis_core::backend::{Backend, FetchById};

use crate::{PgTask, PgTaskId, PostgresStorage, error::Error, from_row::PgTaskRow};

impl<Args> FetchById for PostgresStorage<Args>
where
    Self: Backend<Error = Error, Task = PgTask>,
    Args: 'static,
{
    fn fetch_by_id(
        &mut self,
        id: &PgTaskId,
    ) -> impl Future<Output = Result<Option<Self::Task>, Self::Error>> + Send {
        let pool = self.persistence.pool.clone();
        let id = id.to_string();
        async move {
            let task = sqlx::query_file_as!(PgTaskRow, "queries/task/find_by_id.sql", id)
                .fetch_optional(&pool)
                .await?
                .map(|r: PgTaskRow| r.try_into())
                .transpose()?;
            Ok(task)
        }
    }
}