use super::{BufferedWriter, CommittedWriter, PendingWriter};
use crate::model::ArrowSchema;
use crate::model::write_stream::Type;
use crate::write::transport::Transport;
use std::sync::Arc;
pub(crate) mod sealed {
use super::*;
pub trait Writer {
const STREAM_TYPE: Type;
fn build(inner: Arc<Transport>, write_stream: String, schema: ArrowSchema) -> Self;
}
impl Writer for PendingWriter {
const STREAM_TYPE: Type = Type::Pending;
fn build(inner: Arc<Transport>, write_stream: String, schema: ArrowSchema) -> Self {
Self::new(inner, write_stream, schema)
}
}
impl Writer for CommittedWriter {
const STREAM_TYPE: Type = Type::Committed;
fn build(inner: Arc<Transport>, write_stream: String, schema: ArrowSchema) -> Self {
Self::new(inner, write_stream, schema)
}
}
impl Writer for BufferedWriter {
const STREAM_TYPE: Type = Type::Buffered;
fn build(inner: Arc<Transport>, write_stream: String, schema: ArrowSchema) -> Self {
Self::new(inner, write_stream, schema)
}
}
}
pub trait Writer: sealed::Writer + Sized {}
impl<T: sealed::Writer + Sized> Writer for T {}