use std::os::unix::process::CommandExt;
use std::process::Command;
use crate::Result;
use crate::errors::Error;
use crate::paths::Paths;
use crate::version::Version;
pub const RABBITMQ_TOOLS: &[&str] = &[
"rabbitmqctl",
"rabbitmq-diagnostics",
"rabbitmq-plugins",
"rabbitmq-queues",
"rabbitmq-streams",
"rabbitmq-upgrade",
];
pub fn run(paths: &Paths, version: &Version, tool: &str, args: &[String]) -> Result<()> {
if !paths.version_installed(version) {
return Err(Error::VersionNotInstalled(version.clone()));
}
if !RABBITMQ_TOOLS.contains(&tool) {
return Err(Error::UnknownTool(format!(
"'{}'. Valid tools: {}",
tool,
RABBITMQ_TOOLS.join(", ")
)));
}
let tool_path = paths.version_sbin_dir(version).join(tool);
if !tool_path.exists() {
return Err(Error::FileNotFound(tool_path.display().to_string()));
}
let err = Command::new(&tool_path).args(args).exec();
Err(Error::CommandFailed(format!(
"failed to execute {}: {}",
tool_path.display(),
err
)))
}