use async_trait::async_trait;
use tokio::io::{AsyncRead, AsyncSeek, AsyncWrite};
use transferred_core::{BatchStream, TransferredError};
pub mod parquet;
pub use parquet::Parquet;
pub trait FileReader: AsyncRead + AsyncSeek + Send + Unpin {}
impl<T: AsyncRead + AsyncSeek + Send + Unpin> FileReader for T {}
pub trait FileWriter: AsyncWrite + Send + Unpin {}
impl<T: AsyncWrite + Send + Unpin> FileWriter for T {}
#[async_trait]
pub trait FormatRead: Send + Sync {
async fn read(&self, reader: Box<dyn FileReader>) -> Result<BatchStream, TransferredError>;
}
#[async_trait]
pub trait FormatWrite: Send + Sync {
fn file_extension(&self) -> &'static str;
async fn write(
&self,
writer: Box<dyn FileWriter>,
batches: BatchStream,
) -> Result<u64, TransferredError>;
}