#[cfg(feature = "csv")]
mod csv;
mod data;
#[cfg(any(feature = "json", feature = "csv"))]
mod file;
#[cfg(feature = "json")]
mod jsonl;
mod memory;
mod registry;
use std::future::Future;
pub use data::{Data, READ_BATCH};
#[cfg(feature = "json")]
#[cfg_attr(docsrs, doc(cfg(feature = "json")))]
pub use jsonl::JsonlDataset;
pub use memory::InMemDataset;
pub(crate) use registry::Datasets;
#[cfg(feature = "csv")]
#[cfg_attr(docsrs, doc(cfg(feature = "csv")))]
pub use self::csv::CsvDataset;
use crate::Result;
pub trait Dataset<T>: Send + Sync + 'static {
fn write(&self, item: T) -> impl Future<Output = Result<()>> + Send;
fn read(&self) -> impl Future<Output = Result<Option<T>>> + Send;
fn read_batch(&self, max: usize) -> impl Future<Output = Result<Vec<T>>> + Send
where
T: Send,
{
async move {
let mut items = Vec::new();
while items.len() < max {
match self.read().await? {
Some(item) => items.push(item),
None => break,
}
}
Ok(items)
}
}
fn size_hint(&self) -> Option<usize> {
None
}
}