]>
git.proxmox.com Git - rustc.git/blob - src/doc/book/listings/ch13-functional-features/listing-13-20/src/lib.rs
14 mut args
: impl Iterator
<Item
= String
>,
15 ) -> Result
<Config
, &'
static str> {
18 let query
= match args
.next() {
20 None
=> return Err("Didn't get a query string"),
23 let filename
= match args
.next() {
25 None
=> return Err("Didn't get a file name"),
28 let ignore_case
= env
::var("IGNORE_CASE").is_ok();
39 pub fn run(config
: Config
) -> Result
<(), Box
<dyn Error
>> {
40 let contents
= fs
::read_to_string(config
.filename
)?
;
42 let results
= if config
.ignore_case
{
43 search_case_insensitive(&config
.query
, &contents
)
45 search(&config
.query
, &contents
)
55 pub fn search
<'a
>(query
: &str, contents
: &'a
str) -> Vec
<&'a
str> {
56 let mut results
= Vec
::new();
58 for line
in contents
.lines() {
59 if line
.contains(query
) {
67 pub fn search_case_insensitive
<'a
>(
71 let query
= query
.to_lowercase();
72 let mut results
= Vec
::new();
74 for line
in contents
.lines() {
75 if line
.to_lowercase().contains(&query
) {
92 safe, fast, productive.
96 assert_eq
!(vec
!["safe, fast, productive."], search(query
, contents
));
100 fn case_insensitive() {
104 safe, fast, productive.
109 vec
!["Rust:", "Trust me."],
110 search_case_insensitive(query
, contents
)