use crate::datapipe_types::InputReader;
use crate::file_reader::FileReader;
use crate::http_reader::HttpReader;
use crate::https_reader::HttpsReader;
use crate::stdin_reader::StdinReader;
use crate::tcp_listen_reader::TcpListenReader;
use crate::tcp_reader_writer::TcpReaderWriter;
use crate::tls_listen_reader::TlsListenReader;
use crate::tls_reader_writer::TlsReaderWriter;
use crate::udp_reader::UdpReader;
use bytes::Bytes;
use std::io::Error;
#[derive(Debug)]
pub enum Reader {
File(FileReader),
Http(HttpReader),
Https(HttpsReader),
Stdin(StdinReader),
Tcp(TcpReaderWriter),
TcpListen(TcpListenReader),
Tls(TlsReaderWriter),
TlsListen(TlsListenReader),
Udp(UdpReader),
}
impl InputReader for Reader {
async fn read(&mut self) -> Result<Bytes, Error> {
match self {
Self::File(file_reader) => file_reader.read().await,
Self::Http(http_reader) => http_reader.read().await,
Self::Https(https_reader) => https_reader.read().await,
Self::Stdin(stdin_reader) => stdin_reader.read().await,
Self::Tcp(tcp_reader) => tcp_reader.read().await,
Self::TcpListen(tcp_listen_reader) => tcp_listen_reader.read().await,
Self::Tls(tls_reader) => tls_reader.read().await,
Self::TlsListen(tls_listen_reader) => tls_listen_reader.read().await,
Self::Udp(udp_reader) => udp_reader.read().await,
}
}
}
impl std::default::Default for Reader {
fn default() -> Self {
Self::Stdin(StdinReader::new())
}
}
impl std::convert::From<FileReader> for Reader {
fn from(value: FileReader) -> Self {
Self::File(value)
}
}
impl std::convert::From<HttpReader> for Reader {
fn from(value: HttpReader) -> Self {
Self::Http(value)
}
}
impl std::convert::From<HttpsReader> for Reader {
fn from(value: HttpsReader) -> Self {
Self::Https(value)
}
}
impl std::convert::From<StdinReader> for Reader {
fn from(value: StdinReader) -> Self {
Self::Stdin(value)
}
}
impl std::convert::From<TcpReaderWriter> for Reader {
fn from(value: TcpReaderWriter) -> Self {
Self::Tcp(value)
}
}
impl std::convert::From<TcpListenReader> for Reader {
fn from(value: TcpListenReader) -> Self {
Self::TcpListen(value)
}
}
impl std::convert::From<TlsReaderWriter> for Reader {
fn from(value: TlsReaderWriter) -> Self {
Self::Tls(value)
}
}
impl std::convert::From<TlsListenReader> for Reader {
fn from(value: TlsListenReader) -> Self {
Self::TlsListen(value)
}
}
impl std::convert::From<UdpReader> for Reader {
fn from(value: UdpReader) -> Self {
Self::Udp(value)
}
}