use crate::ssh::ssh_config::types::SshHostConfig;
use anyhow::Result;
pub(super) fn parse_environment_option(
host: &mut SshHostConfig,
keyword: &str,
args: &[String],
line_number: usize,
) -> Result<()> {
match keyword {
"sendenv" => {
if args.is_empty() {
anyhow::bail!("SendEnv requires a value at line {line_number}");
}
host.send_env.extend(args.iter().map(|s| s.to_string()));
}
"setenv" => {
if args.is_empty() {
anyhow::bail!("SetEnv requires at least one name=value pair at line {line_number}");
}
let pairs: Vec<&str> = if args.len() == 1 && args[0].contains('=') {
args[0].split_whitespace().collect()
} else {
args.iter().map(String::as_str).collect()
};
for pair in pairs {
if let Some(eq_pos) = pair.find('=') {
let name = pair[..eq_pos].to_string();
let value = pair[eq_pos + 1..].to_string();
host.set_env.insert(name, value);
} else {
anyhow::bail!(
"Invalid SetEnv format '{pair}' at line {line_number} (expected name=value)"
);
}
}
}
_ => unreachable!(
"Unexpected keyword in parse_environment_option: {}",
keyword
),
}
Ok(())
}