]>
git.proxmox.com Git - rustc.git/blob - src/doc/book/listings/ch13-functional-features/listing-13-27/src/lib.rs
8 pub case_sensitive
: bool
,
13 pub fn new(mut args
: std
::env
::Args
) -> Result
<Config
, &'
static str> {
16 let query
= match args
.next() {
18 None
=> return Err("Didn't get a query string"),
21 let filename
= match args
.next() {
23 None
=> return Err("Didn't get a file name"),
26 let case_sensitive
= env
::var("CASE_INSENSITIVE").is_err();
37 pub fn run(config
: Config
) -> Result
<(), Box
<dyn Error
>> {
38 let contents
= fs
::read_to_string(config
.filename
)?
;
40 let results
= if config
.case_sensitive
{
41 search(&config
.query
, &contents
)
43 search_case_insensitive(&config
.query
, &contents
)
53 pub fn search
<'a
>(query
: &str, contents
: &'a
str) -> Vec
<&'a
str> {
54 let mut results
= Vec
::new();
56 for line
in contents
.lines() {
57 if line
.contains(query
) {
65 pub fn search_case_insensitive
<'a
>(
69 let query
= query
.to_lowercase();
70 let mut results
= Vec
::new();
72 for line
in contents
.lines() {
73 if line
.to_lowercase().contains(&query
) {
90 safe, fast, productive.
94 assert_eq
!(vec
!["safe, fast, productive."], search(query
, contents
));
98 fn case_insensitive() {
102 safe, fast, productive.
107 vec
!["Rust:", "Trust me."],
108 search_case_insensitive(query
, contents
)