Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions listings/ch12-an-io-project/listing-12-19/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// ANCHOR: here
// ANCHOR: ch13
pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
let mut results = Vec::new();

Expand All @@ -10,6 +11,7 @@ pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {

results
}
// ANCHOR_END: ch13
// ANCHOR_END: here

#[cfg(test)]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,50 +1,3 @@
use std::env;
use std::error::Error;
use std::fs;

pub struct Config {
pub query: String,
pub file_path: String,
pub ignore_case: bool,
}

// ANCHOR: ch13
impl Config {
pub fn build(args: &[String]) -> Result<Config, &'static str> {
if args.len() < 3 {
return Err("not enough arguments");
}

let query = args[1].clone();
let file_path = args[2].clone();

let ignore_case = env::var("IGNORE_CASE").is_ok();

Ok(Config {
query,
file_path,
ignore_case,
})
}
}
// ANCHOR_END: ch13

pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
let contents = fs::read_to_string(config.file_path)?;

let results = if config.ignore_case {
search_case_insensitive(&config.query, &contents)
} else {
search(&config.query, &contents)
};

for line in results {
println!("{line}");
}

Ok(())
}

pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
let mut results = Vec::new();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
use std::env;
use std::error::Error;
use std::fs;
use std::process;

use minigrep::Config;
use minigrep::{search, search_case_insensitive};

fn main() {
let args: Vec<String> = env::args().collect();
Expand All @@ -11,8 +13,51 @@ fn main() {
process::exit(1);
});

if let Err(e) = minigrep::run(config) {
if let Err(e) = run(config) {
println!("Application error: {e}");
process::exit(1);
}
}

pub struct Config {
pub query: String,
pub file_path: String,
pub ignore_case: bool,
}

// ANCHOR: ch13
impl Config {
fn build(args: &[String]) -> Result<Config, &'static str> {
if args.len() < 3 {
return Err("not enough arguments");
}

let query = args[1].clone();
let file_path = args[2].clone();

let ignore_case = env::var("IGNORE_CASE").is_ok();

Ok(Config {
query,
file_path,
ignore_case,
})
}
}
// ANCHOR_END: ch13

fn run(config: Config) -> Result<(), Box<dyn Error>> {
let contents = fs::read_to_string(config.file_path)?;

let results = if config.ignore_case {
search_case_insensitive(&config.query, &contents)
} else {
search(&config.query, &contents)
};

for line in results {
println!("{line}");
}

Ok(())
}
Original file line number Diff line number Diff line change
@@ -1,48 +1,3 @@
use std::env;
use std::error::Error;
use std::fs;

pub struct Config {
pub query: String,
pub file_path: String,
pub ignore_case: bool,
}

impl Config {
pub fn build(args: &[String]) -> Result<Config, &'static str> {
if args.len() < 3 {
return Err("not enough arguments");
}

let query = args[1].clone();
let file_path = args[2].clone();

let ignore_case = env::var("IGNORE_CASE").is_ok();

Ok(Config {
query,
file_path,
ignore_case,
})
}
}

pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
let contents = fs::read_to_string(config.file_path)?;

let results = if config.ignore_case {
search_case_insensitive(&config.query, &contents)
} else {
search(&config.query, &contents)
};

for line in results {
println!("{line}");
}

Ok(())
}

pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
let mut results = Vec::new();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
use std::env;
use std::error::Error;
use std::fs;
use std::process;

use minigrep::Config;
use minigrep::{search, search_case_insensitive};

// ANCHOR: ch13
fn main() {
Expand All @@ -15,10 +17,51 @@ fn main() {
// --snip--
// ANCHOR_END: ch13

if let Err(e) = minigrep::run(config) {
if let Err(e) = run(config) {
eprintln!("Application error: {e}");
process::exit(1);
}
// ANCHOR: ch13
}
// ANCHOR_END: ch13

pub struct Config {
pub query: String,
pub file_path: String,
pub ignore_case: bool,
}

impl Config {
fn build(args: &[String]) -> Result<Config, &'static str> {
if args.len() < 3 {
return Err("not enough arguments");
}

let query = args[1].clone();
let file_path = args[2].clone();

let ignore_case = env::var("IGNORE_CASE").is_ok();

Ok(Config {
query,
file_path,
ignore_case,
})
}
}

fn run(config: Config) -> Result<(), Box<dyn Error>> {
let contents = fs::read_to_string(config.file_path)?;

let results = if config.ignore_case {
search_case_insensitive(&config.query, &contents)
} else {
search(&config.query, &contents)
};

for line in results {
println!("{line}");
}

Ok(())
}
45 changes: 0 additions & 45 deletions listings/ch13-functional-features/listing-13-18/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,48 +1,3 @@
use std::env;
use std::error::Error;
use std::fs;

pub struct Config {
pub query: String,
pub file_path: String,
pub ignore_case: bool,
}

impl Config {
pub fn build(args: &[String]) -> Result<Config, &'static str> {
if args.len() < 3 {
return Err("not enough arguments");
}

let query = args[1].clone();
let file_path = args[2].clone();

let ignore_case = env::var("IGNORE_CASE").is_ok();

Ok(Config {
query,
file_path,
ignore_case,
})
}
}

pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
let contents = fs::read_to_string(config.file_path)?;

let results = if config.ignore_case {
search_case_insensitive(&config.query, &contents)
} else {
search(&config.query, &contents)
};

for line in results {
println!("{line}");
}

Ok(())
}

pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
let mut results = Vec::new();

Expand Down
47 changes: 45 additions & 2 deletions listings/ch13-functional-features/listing-13-18/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
use std::env;
use std::error::Error;
use std::fs;
use std::process;

use minigrep::Config;
use minigrep::{search, search_case_insensitive};

// ANCHOR: here
fn main() {
Expand All @@ -13,10 +15,51 @@ fn main() {
// --snip--
// ANCHOR_END: here

if let Err(e) = minigrep::run(config) {
if let Err(e) = run(config) {
eprintln!("Application error: {e}");
process::exit(1);
}
// ANCHOR: here
}
// ANCHOR_END: here

pub struct Config {
pub query: String,
pub file_path: String,
pub ignore_case: bool,
}

impl Config {
fn build(args: &[String]) -> Result<Config, &'static str> {
if args.len() < 3 {
return Err("not enough arguments");
}

let query = args[1].clone();
let file_path = args[2].clone();

let ignore_case = env::var("IGNORE_CASE").is_ok();

Ok(Config {
query,
file_path,
ignore_case,
})
}
}

fn run(config: Config) -> Result<(), Box<dyn Error>> {
let contents = fs::read_to_string(config.file_path)?;

let results = if config.ignore_case {
search_case_insensitive(&config.query, &contents)
} else {
search(&config.query, &contents)
};

for line in results {
println!("{line}");
}

Ok(())
}
Loading