Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a2f255a

Browse files
committed
moving to derive
1 parent 4a27dfa commit a2f255a

File tree

25 files changed

+557
-1093
lines changed

25 files changed

+557
-1093
lines changed

01_hello/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
name = "hello"
33
version = "0.1.0"
44
edition = "2021"
5+
authors = [ "Ken Youens-Clark <[email protected]>" ]
56

67
[dependencies]
78

02_echor/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
name = "echor"
33
version = "0.1.0"
44
edition = "2021"
5+
authors = [ "Ken Youens-Clark <[email protected]>" ]
56

67
[dependencies]
78
clap = { version = "4.1.4", features = ["derive"] }

02_echor/src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use clap::Parser;
22

33
#[derive(Debug, Parser)]
44
#[command(author, version, about)]
5+
/// Rust version of `echo`
56
struct Args {
67
/// Input text
78
#[arg(required(true))]

03_catr/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
name = "catr"
33
version = "0.1.0"
44
edition = "2021"
5+
authors = [ "Ken Youens-Clark <[email protected]>" ]
56

67
[dependencies]
7-
clap = "2"
8+
clap = { version = "4.1.4", features = ["derive"] }
89

910
[dev-dependencies]
1011
assert_cmd = "2"

03_catr/src/lib.rs

Lines changed: 0 additions & 86 deletions
This file was deleted.

03_catr/src/main.rs

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,72 @@
1+
use clap::Parser;
2+
use std::error::Error;
3+
use std::fs::File;
4+
use std::io::{self, BufRead, BufReader};
5+
6+
type MyResult<T> = Result<T, Box<dyn Error>>;
7+
8+
#[derive(Debug, Parser)]
9+
#[command(author, version, about)]
10+
/// Rust version of `cat`
11+
pub struct Args {
12+
/// Input file(s)
13+
#[arg(value_name = "FILE", default_value = "-")]
14+
files: Vec<String>,
15+
16+
/// Number lines
17+
#[arg(
18+
short('n'),
19+
long("number"),
20+
conflicts_with("number_nonblank_lines")
21+
)]
22+
number_lines: bool,
23+
24+
/// Number non-blank lines
25+
#[arg(short('b'), long("number-nonblank"))]
26+
number_nonblank_lines: bool,
27+
}
28+
29+
// --------------------------------------------------
130
fn main() {
2-
if let Err(e) = catr::get_args().and_then(catr::run) {
31+
if let Err(e) = run(Args::parse()) {
332
eprintln!("{}", e);
433
std::process::exit(1);
534
}
635
}
36+
37+
// --------------------------------------------------
38+
pub fn run(args: Args) -> MyResult<()> {
39+
for filename in args.files {
40+
match open(&filename) {
41+
Err(e) => eprintln!("{}: {}", filename, e),
42+
Ok(file) => {
43+
let mut last_num = 0;
44+
for (line_num, line_result) in file.lines().enumerate() {
45+
let line = line_result?;
46+
if args.number_lines {
47+
println!("{:6}\t{}", line_num + 1, line);
48+
} else if args.number_nonblank_lines {
49+
if !line.is_empty() {
50+
last_num += 1;
51+
println!("{:6}\t{}", last_num, line);
52+
} else {
53+
println!();
54+
}
55+
} else {
56+
println!("{}", line);
57+
}
58+
}
59+
}
60+
}
61+
}
62+
63+
Ok(())
64+
}
65+
66+
// --------------------------------------------------
67+
fn open(filename: &str) -> MyResult<Box<dyn BufRead>> {
68+
match filename {
69+
"-" => Ok(Box::new(BufReader::new(io::stdin()))),
70+
_ => Ok(Box::new(BufReader::new(File::open(filename)?))),
71+
}
72+
}

03_catr/tests/cli.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ fn usage() -> TestResult {
1919
Command::cargo_bin(PRG)?
2020
.arg(flag)
2121
.assert()
22-
.stdout(predicate::str::contains("USAGE"));
22+
.stdout(predicate::str::contains("Usage"));
2323
}
2424
Ok(())
2525
}

04_headr/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
name = "headr"
33
version = "0.1.0"
44
edition = "2021"
5+
authors = [ "Ken Youens-Clark <[email protected]>" ]
56

67
[dependencies]
7-
clap = "2.33"
8+
clap = { version = "4.1.4", features = ["derive"] }
89

910
[dev-dependencies]
1011
assert_cmd = "2"

04_headr/src/lib.rs

Lines changed: 0 additions & 140 deletions
This file was deleted.

0 commit comments

Comments
 (0)