Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clean up Error Handling case study examples #31473

Merged
merged 1 commit into from
Feb 10, 2016
Merged
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
89 changes: 44 additions & 45 deletions src/doc/book/error-handling.md
Original file line number Diff line number Diff line change
Expand Up @@ -1592,7 +1592,7 @@ fn print_usage(program: &str, opts: Options) {

fn main() {
let args: Vec<String> = env::args().collect();
let program = args[0].clone();
let program = &args[0];

let mut opts = Options::new();
opts.optflag("h", "help", "Show this usage message.");
Expand All @@ -1605,10 +1605,10 @@ fn main() {
print_usage(&program, opts);
return;
}
let data_path = args[1].clone();
let city = args[2].clone();
let data_path = &args[1];
let city = &args[2];

// Do stuff with information
// Do stuff with information
}
```

Expand Down Expand Up @@ -1640,7 +1640,6 @@ sure to add `extern crate csv;` to the top of your file.)

```rust,ignore
use std::fs::File;
use std::path::Path;

// This struct represents the data in each row of the CSV file.
// Type based decoding absolves us of a lot of the nitty gritty error
Expand All @@ -1666,7 +1665,7 @@ fn print_usage(program: &str, opts: Options) {

fn main() {
let args: Vec<String> = env::args().collect();
let program = args[0].clone();
let program = &args[0];

let mut opts = Options::new();
opts.optflag("h", "help", "Show this usage message.");
Expand All @@ -1678,25 +1677,24 @@ fn main() {

if matches.opt_present("h") {
print_usage(&program, opts);
return;
}
return;
}

let data_file = args[1].clone();
let data_path = Path::new(&data_file);
let city = args[2].clone();
let data_path = &args[1];
let city: &str = &args[2];

let file = File::open(data_path).unwrap();
let mut rdr = csv::Reader::from_reader(file);
let file = File::open(data_path).unwrap();
let mut rdr = csv::Reader::from_reader(file);

for row in rdr.decode::<Row>() {
let row = row.unwrap();
for row in rdr.decode::<Row>() {
let row = row.unwrap();

if row.city == city {
println!("{}, {}: {:?}",
row.city, row.country,
row.population.expect("population count"));
}
}
if row.city == city {
println!("{}, {}: {:?}",
row.city, row.country,
row.population.expect("population count"));
}
}
}
```

Expand Down Expand Up @@ -1745,6 +1743,8 @@ Note that we opt to handle the possibility of a missing population count by
simply ignoring that row.

```rust,ignore
use std::path::Path;

struct Row {
// unchanged
}
Expand Down Expand Up @@ -1782,27 +1782,26 @@ fn search<P: AsRef<Path>>(file_path: P, city: &str) -> Vec<PopulationCount> {
}

fn main() {
let args: Vec<String> = env::args().collect();
let program = args[0].clone();
let args: Vec<String> = env::args().collect();
let program = &args[0];

let mut opts = Options::new();
opts.optflag("h", "help", "Show this usage message.");
let mut opts = Options::new();
opts.optflag("h", "help", "Show this usage message.");

let matches = match opts.parse(&args[1..]) {
Ok(m) => { m }
Err(e) => { panic!(e.to_string()) }
};
if matches.opt_present("h") {
print_usage(&program, opts);
return;
}
let matches = match opts.parse(&args[1..]) {
Ok(m) => { m }
Err(e) => { panic!(e.to_string()) }
};
if matches.opt_present("h") {
print_usage(&program, opts);
return;
}

let data_file = args[1].clone();
let data_path = Path::new(&data_file);
let city = args[2].clone();
for pop in search(&data_path, &city) {
println!("{}, {}: {:?}", pop.city, pop.country, pop.count);
}
let data_path = &args[1];
let city = &args[2];
for pop in search(data_path, city) {
println!("{}, {}: {:?}", pop.city, pop.country, pop.count);
}
}

```
Expand Down Expand Up @@ -1912,7 +1911,7 @@ First, here's the new usage:

```rust,ignore
fn print_usage(program: &str, opts: Options) {
println!("{}", opts.usage(&format!("Usage: {} [options] <city>", program)));
println!("{}", opts.usage(&format!("Usage: {} [options] <city>", program)));
}
```
The next part is going to be only a little harder:
Expand All @@ -1924,16 +1923,16 @@ opts.optopt("f", "file", "Choose an input file, instead of using STDIN.", "NAME"
opts.optflag("h", "help", "Show this usage message.");
...
let file = matches.opt_str("f");
let data_file = file.as_ref().map(Path::new);
let data_file = &file.as_ref().map(Path::new);

let city = if !matches.free.is_empty() {
matches.free[0].clone()
&matches.free[0]
} else {
print_usage(&program, opts);
return;
print_usage(&program, opts);
return;
};

match search(&data_file, &city) {
match search(data_file, city) {
Ok(pops) => {
for pop in pops {
println!("{}, {}: {:?}", pop.city, pop.country, pop.count);
Expand Down