use arrow_array::RecordBatch;
use futures::Future;
use super::CurrentFileStatus;
use crate::Result;
use crate::spec::DataFileBuilder;
mod parquet_writer;
pub use parquet_writer::{ParquetWriter, ParquetWriterBuilder};
use crate::io::OutputFile;
pub mod location_generator;
pub mod rolling_writer;
type DefaultOutput = Vec<DataFileBuilder>;
pub trait FileWriterBuilder<O = DefaultOutput>: Clone + Send + Sync + 'static {
type R: FileWriter<O>;
fn build(&self, output_file: OutputFile) -> impl Future<Output = Result<Self::R>> + Send;
}
pub trait FileWriter<O = DefaultOutput>: Send + CurrentFileStatus + 'static {
fn write(&mut self, batch: &RecordBatch) -> impl Future<Output = Result<()>> + Send;
fn close(self) -> impl Future<Output = Result<O>> + Send;
}