From 85a3bd273e927b8dc31aadf263b93ef8fd3b7a39 Mon Sep 17 00:00:00 2001 From: Rory Dudley Date: Mon, 20 May 2024 23:52:37 -0600 Subject: Update the return value of Verse::spellcheck() Instead of returning true or false, if a given bin is found on the $PATH, return the index of where the bin was found. This is useful, in case we want to actually get the full path of the bin. If a full or relative path is specified, the function will return the length of the bins vector. --- src/poem/elements/verse.rs | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'src/poem/elements') diff --git a/src/poem/elements/verse.rs b/src/poem/elements/verse.rs index 5694b55..a1ae65f 100644 --- a/src/poem/elements/verse.rs +++ b/src/poem/elements/verse.rs @@ -192,16 +192,16 @@ impl Verse { /// let stanza_success = Stanza::new(command_success); /// let stanza_fail = Stanza::new(command_fail); /// - /// stanza_success.spellcheck(bins) // -> true - /// stanza_fail.spellcheck(bins) // -> false + /// stanza_success.spellcheck(bins) // -> Some(i) + /// stanza_fail.spellcheck(bins) // -> None /// ``` - pub fn spellcheck(&self, bins: &Vec) -> bool { + pub fn spellcheck(&self, bins: &Vec) -> Option { // An empty verb (i.e. the empty string) cannot be a program, so // return false // Thanks to the parsing in Poem::read, however, it's // unlikely for this to happen if self.verb().is_empty() { - return false; + return None; } // Only search the $PATH if a full or relative path was not given, or @@ -209,17 +209,18 @@ impl Verse { if !Path::new(self.verb().as_str()).exists() { // Try to find a binary in our path with the same name as the verb // Searches in $PATH order - match bins - .iter() - .find(|bin| bin.split('/').last().unwrap() == self.verb()) - { - Some(_) => return true, - None => return false, + for (i, path) in bins.iter().enumerate() { + if path.split('/').last().unwrap() == self.verb() { + return Some(i); + } } + + // If it was not found, return None + return None; } - // Return true if the full path or relative path exists - true + // Return the length of bins if the full path or relative path exists + Some(bins.len()) } /// Run a command -- cgit v1.2.3