use std::collections::HashMap;
use utf8path::Path;
fn main() {
let args = std::env::args().collect::<Vec<_>>();
if args.len() != 3 {
eprintln!("USAGE: rccat file [describe|rcvar|run]");
std::process::exit(1);
}
let name = if let Ok(path) = std::env::var("RCVAR_ARGV0") {
path.to_string()
} else {
rc_conf::name_from_path(&Path::new(&args[0]))
};
let prefix = rc_conf::var_prefix_from_service(&name);
let stdin = std::fs::read_to_string(&args[1]).unwrap();
if args[2] == "describe" {
println!("{}", stdin.trim_end());
} else if args[2] == "rcvar" {
let mut rcvar = shvar::rcvar(&stdin)
.expect("shell variable substitution should be valid")
.into_iter()
.map(|v| format!("{prefix}{v}"))
.collect::<Vec<_>>();
rcvar.sort();
println!("{}", rcvar.join("\n"));
} else if args[2] == "run" {
let evp = rc_conf::EnvironmentVariableProvider::new(Some(prefix.clone()));
let meta = HashMap::from([("NAME".to_string(), prefix)]);
for line in stdin.lines() {
let out = shvar::expand_recursive(&(&meta, &evp), line)
.expect("shell variable expansion should be valid");
println!("{}", out.trim_end());
}
} else {
eprintln!("USAGE: rccat [describe|rcvar|run]");
std::process::exit(1);
}
}