pub mod command;
pub mod file_reader;
mod line_batcher;
pub mod stdin;
use crate::io::reader::command::CommandReader;
use crate::io::reader::file_reader::FileReader;
use crate::io::reader::stdin::StdinReader;
use anyhow::Result;
use shared_child::SharedChild;
use std::sync::Arc;
pub use line_batcher::LineBatch;
pub enum Reader {
File(FileReader),
Stdin(StdinReader),
Command(CommandReader),
}
#[derive(Debug)]
pub enum StreamEvent {
InitialReadComplete,
Ended,
Lines(LineBatch),
}
impl Reader {
pub fn next(&mut self) -> Result<StreamEvent> {
match self {
Reader::File(r) => r.next(),
Reader::Stdin(r) => r.next(),
Reader::Command(r) => r.next(),
}
}
pub fn exec_child(&self) -> Option<Arc<SharedChild>> {
match self {
Reader::Command(r) => Some(r.child()),
Reader::File(_) | Reader::Stdin(_) => None,
}
}
}