pub fn search<'a>(query: &str, contents: &'a str) -> impl Iterator<Item = &'a str> {
contents
.lines()
.filter(move |line| line.contains(query))
}
pub fn search_case_insensitive<'a>(query: &str, contents: &'a str) -> impl Iterator<Item = &'a str> {
let query = query.to_lowercase();
contents
.lines()
.filter(move |line| {
let line = line.to_lowercase();
line.contains(&query)
})
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_case_sensitive() {
let query = "duct";
let contents = "\
Rust:
safe, fast, productive.
Pick three.
Duct tape.";
assert_eq!(vec!["safe, fast, productive."], search(query, contents).collect::<Vec<_>>())
}
#[test]
fn test_case_insensitive() {
let query = "duct";
let contents = "\
Rust:
safe, fast, productive.
Pick three.
Duct tape.";
assert_eq!(vec!["safe, fast, productive.", "Duct tape."], search_case_insensitive(query, contents).collect::<Vec<_>>())
}
}