use acorn::prelude::{io, BufRead, Write};
use is_terminal::IsTerminal;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum InputOutputStreamState {
Piped,
NotPiped,
}
pub fn is_stdout_piped() -> bool {
stdout_piped_status() == InputOutputStreamState::Piped
}
pub fn read_stdin() -> Option<String> {
match stdin_piped_status() {
| InputOutputStreamState::Piped => {
let stdin = io::stdin();
let reader = stdin.lock();
let lines = reader.lines();
let value = lines.last().expect("Failed to read stdin line").unwrap();
Some(value)
}
| InputOutputStreamState::NotPiped => None,
}
}
pub fn write_stdout<S>(value: S)
where
S: Into<String>,
{
let mut stdout = io::stdout().lock();
stdout.write_all(value.into().as_bytes()).unwrap();
stdout.flush().unwrap();
drop(stdout);
}
fn stdin_piped_status() -> InputOutputStreamState {
if io::stdin().is_terminal() {
InputOutputStreamState::NotPiped
} else {
InputOutputStreamState::Piped
}
}
fn stdout_piped_status() -> InputOutputStreamState {
if io::stdout().is_terminal() {
InputOutputStreamState::NotPiped
} else {
InputOutputStreamState::Piped
}
}