graphile_worker_database 0.1.5

Database driver abstraction for graphile_worker
Documentation
use super::super::*;

#[derive(Debug)]
pub(crate) struct MockDriver {
    pub(crate) rows: Vec<DbRow>,
}

impl DbExecutor for MockDriver {
    fn execute<'a>(
        &'a self,
        _sql: &'a str,
        _params: DbParams,
    ) -> graphile_worker_database::BoxFuture<'a, Result<u64, DbError>> {
        Box::pin(async { Ok(7) })
    }

    fn fetch_all<'a>(
        &'a self,
        _sql: &'a str,
        _params: DbParams,
    ) -> graphile_worker_database::BoxFuture<'a, Result<Vec<DbRow>, DbError>> {
        Box::pin(async { Ok(self.rows.clone()) })
    }
}

impl DatabaseDriver for MockDriver {
    fn as_any(&self) -> &dyn Any {
        self
    }

    fn begin<'a>(
        &'a self,
    ) -> graphile_worker_database::BoxFuture<'a, Result<DbTransaction, DbError>> {
        Box::pin(async { Ok(DbTransaction::new(Box::new(MockTransaction))) })
    }

    fn listen<'a>(
        &'a self,
        _channel: &'a str,
    ) -> graphile_worker_database::BoxFuture<'a, Result<Option<NotificationStream>, DbError>> {
        Box::pin(async { Ok(None) })
    }
}

struct MockTransaction;

impl DbExecutor for MockTransaction {
    fn execute<'a>(
        &'a self,
        _sql: &'a str,
        _params: DbParams,
    ) -> graphile_worker_database::BoxFuture<'a, Result<u64, DbError>> {
        Box::pin(async { Ok(3) })
    }

    fn fetch_all<'a>(
        &'a self,
        _sql: &'a str,
        _params: DbParams,
    ) -> graphile_worker_database::BoxFuture<'a, Result<Vec<DbRow>, DbError>> {
        Box::pin(async { Ok(vec![row_mapping::cells([("value", DbCell::I32(99))])]) })
    }
}

impl TransactionDriver for MockTransaction {
    fn commit(
        self: Box<Self>,
    ) -> graphile_worker_database::BoxFuture<'static, Result<(), DbError>> {
        Box::pin(async { Ok(()) })
    }
}