datasources 0.1.5

Async datasource interfaces, middleware, registry, and test doubles
Documentation
use super::not_implemented::fail;
use crate::reader::Reader;
use crate::result::Result;
use crate::row::Row;
use async_trait::async_trait;
use std::marker::PhantomData;

pub struct StubReader<T = Row> {
    provider: String,
    _item: PhantomData<T>,
}

impl<T> StubReader<T> {
    pub fn new(provider: impl Into<String>) -> Self {
        Self {
            provider: provider.into(),
            _item: PhantomData,
        }
    }
}

#[async_trait]
impl<T> Reader<T> for StubReader<T>
where
    T: Send + Sync,
{
    fn current(&self) -> Option<T> {
        None
    }

    async fn next(&self) -> Result<bool> {
        Err(fail(&self.provider))
    }
}