use crate::internals::helpers::err_write;
use std::io::Write;
use std::process::{Command, Stdio};
#[inline]
pub fn echo<W: Write, E: Write>(
str: &str,
out: &mut W,
hook: &str,
stderr: &mut E,
err_continue: bool,
) {
if hook == "default" || hook == "" {
let _ = write!(out, "{str}\n");
} else {
let mut child = Command::new(hook)
.arg("echo")
.arg(str)
.stdin(Stdio::inherit())
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.spawn()
.expect("Failed to start");
let status = child.wait().unwrap();
if status.code().unwrap_or(1) > 1 {
err_write("error hook crashed", stderr);
if !err_continue {
std::process::exit(1);
} else {
let _ = write!(stderr, "using builtin echo instead of hook echo");
let _ = write!(out, "{str}\n");
}
} else {
()
}
}
}