pub(crate) fn require_cli_request(
request: Option<&String>,
subcommand: &str,
) -> Result<String, String> {
let trimmed = request
.map(String::as_str)
.map(str::trim)
.filter(|s| !s.is_empty());
trimmed
.map(std::string::ToString::to_string)
.ok_or_else(|| {
if subcommand.is_empty() {
"malvin: missing required REQUEST (text or path)".to_string()
} else {
format!("malvin {subcommand}: missing required REQUEST (text or path)")
}
})
}
#[cfg(test)]
mod tests {
use super::require_cli_request;
#[test]
fn errors_when_missing() {
let err = require_cli_request(None, "tidy").unwrap_err();
assert!(err.contains("tidy") && err.contains("REQUEST"));
}
#[test]
fn rejects_whitespace_only_request() {
let whitespace = Some(" ".to_string());
let err = require_cli_request(whitespace.as_ref(), "tidy").unwrap_err();
assert!(err.contains("tidy") && err.contains("REQUEST"));
}
#[test]
fn accepts_trimmed_non_empty_request() {
let got = require_cli_request(Some(&" hi ".to_string()), "do").expect("ok");
assert_eq!(got, "hi");
}
}