diff options
author | Melody Horn <melody@boringcactus.com> | 2021-04-05 11:30:21 -0600 |
---|---|---|
committer | Melody Horn <melody@boringcactus.com> | 2021-04-05 11:30:21 -0600 |
commit | 9267fb0387a87edc4b059dbbdf0258ec6b7cc62d (patch) | |
tree | f43105666bf88e4d39073068328a663b5dfb015f | |
parent | 0d8aed06c3be7765caf98385c1883b3db7a507b8 (diff) | |
download | makers-9267fb0387a87edc4b059dbbdf0258ec6b7cc62d.tar.gz makers-9267fb0387a87edc4b059dbbdf0258ec6b7cc62d.zip |
implement function `findstring`
-rw-r--r-- | src/makefile/functions.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/makefile/functions.rs b/src/makefile/functions.rs index 6e04b7a..6dacd10 100644 --- a/src/makefile/functions.rs +++ b/src/makefile/functions.rs @@ -20,6 +20,10 @@ pub fn expand_call( assert_eq!(args.len(), 1); text::strip(macros, &args[0]) } + "findstring" => { + assert_eq!(args.len(), 2); + text::findstring(macros, &args[0], &args[1]) + } "filter" => { assert_eq!(args.len(), 2); text::filter(macros, &args[0], &args[1]) @@ -110,6 +114,20 @@ mod text { Ok(words.join(" ")) } + pub fn findstring( + macros: &MacroSet, + needle: &TokenString, + haystack: &TokenString, + ) -> Result<String> { + let needle = macros.expand(needle)?; + let haystack = macros.expand(haystack)?; + if haystack.contains(&needle) { + Ok(needle) + } else { + Ok(String::new()) + } + } + pub fn filter(macros: &MacroSet, patterns: &TokenString, text: &TokenString) -> Result<String> { let patterns = macros.expand(patterns)?; let patterns = patterns.split_whitespace().collect::<Vec<_>>(); @@ -380,6 +398,13 @@ mod test { } #[test] + fn findstring() -> R { + assert_eq!(call!(findstring "hi", "thighs"), "hi"); + assert_eq!(call!(findstring "hey", "hello there"), ""); + Ok(()) + } + + #[test] fn filter() -> R { let result = call!(filter "word", "this contains a word inside it"); assert_eq!(result, "word"); |