pub mod date;
use std::process::{Command, Stdio};
pub fn require_tool_with_arg(
name: &str,
version_arg: &str,
install_hint: &str,
) -> Result<(), String> {
match Command::new(name)
.arg(version_arg)
.stdout(Stdio::null())
.stderr(Stdio::null())
.status()
{
Ok(s) if s.success() => Ok(()),
Ok(s) => Err(format!(
"{name} exited with {s}; is it installed correctly? \
Install it with: {install_hint}"
)),
Err(_) => Err(format!("{name} not found. Install it with: {install_hint}")),
}
}
pub fn require_tool(name: &str, install_hint: &str) -> Result<(), String> {
require_tool_with_arg(name, "--version", install_hint)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn require_missing_tool() {
let result = require_tool("nonexistent_tool_xyz_123", "magic install");
assert!(result.is_err());
let msg = result.unwrap_err();
assert!(msg.contains("nonexistent_tool_xyz_123"));
assert!(msg.contains("magic install"));
}
#[test]
fn require_available_tool() {
let result = require_tool("sh", "should already be installed");
let _ = result;
}
}