use std::io::{self};
use std::process::{Command, Stdio};
#[inline]
pub fn read(var: &str, hook: &str) -> String {
if hook == "default" || hook == "" {
let var = var.strip_prefix("$").expect("No $ before the variable");
let mut var: String = std::env::var(var).unwrap_or_else(|_| String::new());
io::stdin()
.read_line(&mut var)
.expect("Failed to read line from stdin");
var = var.strip_suffix("\n").unwrap_or(&var).to_string();
var
} else {
let var = var.strip_prefix("$").expect("No $ before the variable");
let output = Command::new(hook)
.arg("read")
.arg(var)
.stdin(Stdio::inherit())
.stdout(Stdio::piped())
.stderr(Stdio::inherit())
.output()
.expect("Failed to start");
if output.status.success() {
let result_str = String::from_utf8_lossy(&output.stdout);
result_str.strip_suffix("\n").unwrap_or(&var).to_string()
} else {
String::new()
}
}
}