use std::fs::File;
use std::io::{BufRead, BufReader};
use std::path::Path;
use super::dct_error::Result;
use super::dct_reader::DctReader;
use super::schema::Schema;
#[cfg(feature = "tokio")]
use super::async_dct_reader::AsyncDctReader;
#[derive(Debug)]
pub struct DctReaderOptions {
schema: Schema,
record_warnings: bool,
}
impl DctReaderOptions {
#[must_use]
pub(super) fn new(schema: Schema) -> Self {
Self {
schema,
record_warnings: true,
}
}
#[must_use]
#[inline]
pub fn record_warnings(mut self, enabled: bool) -> Self {
self.record_warnings = enabled;
self
}
#[must_use]
#[inline]
pub fn from_reader<R: BufRead>(self, reader: R) -> DctReader<R> {
DctReader::new(self.schema, reader, self.record_warnings)
}
#[must_use]
#[inline]
pub fn from_file(self, file: File) -> DctReader<BufReader<File>> {
let reader = BufReader::new(file);
self.from_reader(reader)
}
pub fn from_path(self, path: impl AsRef<Path>) -> Result<DctReader<BufReader<File>>> {
let file = File::open(path)?;
let reader = self.from_file(file);
Ok(reader)
}
#[cfg(feature = "tokio")]
#[must_use]
#[inline]
pub fn from_tokio_reader<R: tokio::io::AsyncBufRead + Unpin>(
self,
reader: R,
) -> AsyncDctReader<R> {
AsyncDctReader::new(self.schema, reader, self.record_warnings)
}
#[cfg(feature = "tokio")]
#[must_use]
#[inline]
pub fn from_tokio_file(
self,
file: tokio::fs::File,
) -> AsyncDctReader<tokio::io::BufReader<tokio::fs::File>> {
let reader = tokio::io::BufReader::new(file);
self.from_tokio_reader(reader)
}
#[cfg(feature = "tokio")]
pub async fn from_tokio_path(
self,
path: impl AsRef<Path>,
) -> Result<AsyncDctReader<tokio::io::BufReader<tokio::fs::File>>> {
let file = tokio::fs::File::open(path).await?;
let reader = self.from_tokio_file(file);
Ok(reader)
}
}