summaryrefslogtreecommitdiffstats
path: root/src/doc/book/listings/ch18-patterns-and-matching
diff options
context:
space:
mode:
Diffstat (limited to 'src/doc/book/listings/ch18-patterns-and-matching')
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/src/main.rs19
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/src/main.rs13
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/output.txt7
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/src/main.rs9
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/src/main.rs5
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/output.txt15
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/src/main.rs5
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/src/main.rs7
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/src/main.rs8
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/output.txt19
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/src/main.rs6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/src/main.rs8
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/output.txt16
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/src/main.rs7
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/src/main.rs14
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/src/main.rs12
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/src/main.rs12
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/src/main.rs16
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/src/main.rs27
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/src/main.rs27
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/src/main.rs7
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/src/main.rs17
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/src/main.rs4
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/src/main.rs15
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/src/main.rs9
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.lock4
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/output.txt11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/rustfmt-ignore1
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/src/main.rs9
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/src/main.rs12
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/src/main.rs19
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/src/main.rs12
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/src/main.rs10
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs10
108 files changed, 871 insertions, 0 deletions
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/src/main.rs
new file mode 100644
index 000000000..fc87768fb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/src/main.rs
@@ -0,0 +1,19 @@
+fn main() {
+ let favorite_color: Option<&str> = None;
+ let is_tuesday = false;
+ let age: Result<u8, _> = "34".parse();
+
+ if let Some(color) = favorite_color {
+ println!("Using your favorite color, {color}, as the background");
+ } else if is_tuesday {
+ println!("Tuesday is green day!");
+ } else if let Ok(age) = age {
+ if age > 30 {
+ println!("Using purple as the background color");
+ } else {
+ println!("Using orange as the background color");
+ }
+ } else {
+ println!("Using blue as the background color");
+ }
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/src/main.rs
new file mode 100644
index 000000000..5f75a4f2d
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ // ANCHOR: here
+ let mut stack = Vec::new();
+
+ stack.push(1);
+ stack.push(2);
+ stack.push(3);
+
+ while let Some(top) = stack.pop() {
+ println!("{}", top);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/output.txt b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/output.txt
new file mode 100644
index 000000000..02fdecbf5
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/output.txt
@@ -0,0 +1,7 @@
+$ cargo run
+ Compiling patterns v0.1.0 (file:///projects/patterns)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.52s
+ Running `target/debug/patterns`
+a is at index 0
+b is at index 1
+c is at index 2
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/src/main.rs
new file mode 100644
index 000000000..eb922d62c
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ let v = vec!['a', 'b', 'c'];
+
+ for (index, value) in v.iter().enumerate() {
+ println!("{} is at index {}", value, index);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/src/main.rs
new file mode 100644
index 000000000..27b0c3fbd
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ // ANCHOR: here
+ let (x, y, z) = (1, 2, 3);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/output.txt b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/output.txt
new file mode 100644
index 000000000..57916a1f1
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/output.txt
@@ -0,0 +1,15 @@
+$ cargo run
+ Compiling patterns v0.1.0 (file:///projects/patterns)
+error[E0308]: mismatched types
+ --> src/main.rs:2:9
+ |
+2 | let (x, y) = (1, 2, 3);
+ | ^^^^^^ --------- this expression has type `({integer}, {integer}, {integer})`
+ | |
+ | expected a tuple with 3 elements, found one with 2 elements
+ |
+ = note: expected tuple `({integer}, {integer}, {integer})`
+ found tuple `(_, _)`
+
+For more information about this error, try `rustc --explain E0308`.
+error: could not compile `patterns` due to previous error
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/src/main.rs
new file mode 100644
index 000000000..39f768e29
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ // ANCHOR: here
+ let (x, y) = (1, 2, 3);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/src/main.rs
new file mode 100644
index 000000000..c5d71e6c1
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/src/main.rs
@@ -0,0 +1,7 @@
+// ANCHOR: here
+fn foo(x: i32) {
+ // code goes here
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/src/main.rs
new file mode 100644
index 000000000..4eccb8088
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/src/main.rs
@@ -0,0 +1,8 @@
+fn print_coordinates(&(x, y): &(i32, i32)) {
+ println!("Current location: ({}, {})", x, y);
+}
+
+fn main() {
+ let point = (3, 5);
+ print_coordinates(&point);
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/output.txt b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/output.txt
new file mode 100644
index 000000000..72274d07c
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/output.txt
@@ -0,0 +1,19 @@
+$ cargo run
+ Compiling patterns v0.1.0 (file:///projects/patterns)
+error[E0005]: refutable pattern in local binding: `None` not covered
+ --> src/main.rs:3:9
+ |
+3 | let Some(x) = some_option_value;
+ | ^^^^^^^ pattern `None` not covered
+ |
+ = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant
+ = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html
+note: `Option<i32>` defined here
+ = note: the matched value is of type `Option<i32>`
+help: you might want to use `if let` to ignore the variant that isn't matched
+ |
+3 | let x = if let Some(x) = some_option_value { x } else { todo!() };
+ | ++++++++++ ++++++++++++++++++++++
+
+For more information about this error, try `rustc --explain E0005`.
+error: could not compile `patterns` due to previous error
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/src/main.rs
new file mode 100644
index 000000000..7baa02a49
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ let some_option_value: Option<i32> = None;
+ // ANCHOR: here
+ let Some(x) = some_option_value;
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/src/main.rs
new file mode 100644
index 000000000..d6274fc0e
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ let some_option_value: Option<i32> = None;
+ // ANCHOR: here
+ if let Some(x) = some_option_value {
+ println!("{}", x);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/output.txt b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/output.txt
new file mode 100644
index 000000000..702d10a23
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/output.txt
@@ -0,0 +1,16 @@
+$ cargo run
+ Compiling patterns v0.1.0 (file:///projects/patterns)
+warning: irrefutable `if let` pattern
+ --> src/main.rs:2:8
+ |
+2 | if let x = 5 {
+ | ^^^^^^^^^
+ |
+ = note: `#[warn(irrefutable_let_patterns)]` on by default
+ = note: this pattern will always match, so the `if let` is useless
+ = help: consider replacing the `if let` with a `let`
+
+warning: `patterns` (bin "patterns") generated 1 warning
+ Finished dev [unoptimized + debuginfo] target(s) in 0.39s
+ Running `target/debug/patterns`
+5
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/src/main.rs
new file mode 100644
index 000000000..cb81772e0
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ // ANCHOR: here
+ if let x = 5 {
+ println!("{}", x);
+ };
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/src/main.rs
new file mode 100644
index 000000000..db942b7ac
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/src/main.rs
@@ -0,0 +1,14 @@
+fn main() {
+ // ANCHOR: here
+ let x = Some(5);
+ let y = 10;
+
+ match x {
+ Some(50) => println!("Got 50"),
+ Some(y) => println!("Matched, y = {y}"),
+ _ => println!("Default case, x = {:?}", x),
+ }
+
+ println!("at the end: x = {:?}, y = {y}", x);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/src/main.rs
new file mode 100644
index 000000000..62f4ccbf1
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/src/main.rs
@@ -0,0 +1,12 @@
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+fn main() {
+ let p = Point { x: 0, y: 7 };
+
+ let Point { x: a, y: b } = p;
+ assert_eq!(0, a);
+ assert_eq!(7, b);
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/src/main.rs
new file mode 100644
index 000000000..5badc1594
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/src/main.rs
@@ -0,0 +1,12 @@
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+fn main() {
+ let p = Point { x: 0, y: 7 };
+
+ let Point { x, y } = p;
+ assert_eq!(0, x);
+ assert_eq!(7, y);
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/src/main.rs
new file mode 100644
index 000000000..8d445d9b9
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/src/main.rs
@@ -0,0 +1,16 @@
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+// ANCHOR: here
+fn main() {
+ let p = Point { x: 0, y: 7 };
+
+ match p {
+ Point { x, y: 0 } => println!("On the x axis at {}", x),
+ Point { x: 0, y } => println!("On the y axis at {}", y),
+ Point { x, y } => println!("On neither axis: ({}, {})", x, y),
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/src/main.rs
new file mode 100644
index 000000000..9b8dac193
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/src/main.rs
@@ -0,0 +1,27 @@
+enum Message {
+ Quit,
+ Move { x: i32, y: i32 },
+ Write(String),
+ ChangeColor(i32, i32, i32),
+}
+
+fn main() {
+ let msg = Message::ChangeColor(0, 160, 255);
+
+ match msg {
+ Message::Quit => {
+ println!("The Quit variant has no data to destructure.")
+ }
+ Message::Move { x, y } => {
+ println!(
+ "Move in the x direction {} and in the y direction {}",
+ x, y
+ );
+ }
+ Message::Write(text) => println!("Text message: {}", text),
+ Message::ChangeColor(r, g, b) => println!(
+ "Change the color to red {}, green {}, and blue {}",
+ r, g, b
+ ),
+ }
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/src/main.rs
new file mode 100644
index 000000000..ed6a20bf4
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/src/main.rs
@@ -0,0 +1,27 @@
+enum Color {
+ Rgb(i32, i32, i32),
+ Hsv(i32, i32, i32),
+}
+
+enum Message {
+ Quit,
+ Move { x: i32, y: i32 },
+ Write(String),
+ ChangeColor(Color),
+}
+
+fn main() {
+ let msg = Message::ChangeColor(Color::Hsv(0, 160, 255));
+
+ match msg {
+ Message::ChangeColor(Color::Rgb(r, g, b)) => println!(
+ "Change the color to red {}, green {}, and blue {}",
+ r, g, b
+ ),
+ Message::ChangeColor(Color::Hsv(h, s, v)) => println!(
+ "Change the color to hue {}, saturation {}, and value {}",
+ h, s, v
+ ),
+ _ => (),
+ }
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/src/main.rs
new file mode 100644
index 000000000..cf1fbe072
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/src/main.rs
@@ -0,0 +1,7 @@
+fn foo(_: i32, y: i32) {
+ println!("This code only uses the y parameter: {}", y);
+}
+
+fn main() {
+ foo(3, 4);
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/src/main.rs
new file mode 100644
index 000000000..b776c64c4
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/src/main.rs
@@ -0,0 +1,17 @@
+fn main() {
+ // ANCHOR: here
+ let mut setting_value = Some(5);
+ let new_setting_value = Some(10);
+
+ match (setting_value, new_setting_value) {
+ (Some(_), Some(_)) => {
+ println!("Can't overwrite an existing customized value");
+ }
+ _ => {
+ setting_value = new_setting_value;
+ }
+ }
+
+ println!("setting is {:?}", setting_value);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/src/main.rs
new file mode 100644
index 000000000..e28dab111
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let numbers = (2, 4, 8, 16, 32);
+
+ match numbers {
+ (first, _, third, _, fifth) => {
+ println!("Some numbers: {first}, {third}, {fifth}")
+ }
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/src/main.rs
new file mode 100644
index 000000000..1ffc46bad
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/src/main.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let _x = 5;
+ let y = 10;
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/src/main.rs
new file mode 100644
index 000000000..980610503
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let s = Some(String::from("Hello!"));
+
+ if let Some(_s) = s {
+ println!("found a string");
+ }
+
+ println!("{:?}", s);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/src/main.rs
new file mode 100644
index 000000000..e2faa345b
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let s = Some(String::from("Hello!"));
+
+ if let Some(_) = s {
+ println!("found a string");
+ }
+
+ println!("{:?}", s);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/src/main.rs
new file mode 100644
index 000000000..7a9d9bb36
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/src/main.rs
@@ -0,0 +1,15 @@
+fn main() {
+ // ANCHOR: here
+ struct Point {
+ x: i32,
+ y: i32,
+ z: i32,
+ }
+
+ let origin = Point { x: 0, y: 0, z: 0 };
+
+ match origin {
+ Point { x, .. } => println!("x is {}", x),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/src/main.rs
new file mode 100644
index 000000000..3f9aaafc2
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let numbers = (2, 4, 8, 16, 32);
+
+ match numbers {
+ (first, .., last) => {
+ println!("Some numbers: {first}, {last}");
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.lock
new file mode 100644
index 000000000..a233623e5
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.lock
@@ -0,0 +1,4 @@
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/output.txt b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/output.txt
new file mode 100644
index 000000000..7e0357eac
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/output.txt
@@ -0,0 +1,11 @@
+$ cargo run
+ Compiling patterns v0.1.0 (file:///projects/patterns)
+error: `..` can only be used once per tuple pattern
+ --> src/main.rs:5:22
+ |
+5 | (.., second, ..) => {
+ | -- ^^ can only be used once per tuple pattern
+ | |
+ | previously used here
+
+error: could not compile `patterns` due to previous error
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/rustfmt-ignore b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/rustfmt-ignore
new file mode 100644
index 000000000..06a976dd4
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/rustfmt-ignore
@@ -0,0 +1 @@
+This listing deliberately doesn't parse so rustfmt fails.
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/src/main.rs
new file mode 100644
index 000000000..b90884eb9
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let numbers = (2, 4, 8, 16, 32);
+
+ match numbers {
+ (.., second, ..) => {
+ println!("Some numbers: {}", second)
+ },
+ }
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/src/main.rs
new file mode 100644
index 000000000..41fce9795
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let num = Some(4);
+
+ match num {
+ Some(x) if x % 2 == 0 => println!("The number {} is even", x),
+ Some(x) => println!("The number {} is odd", x),
+ None => (),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/src/main.rs
new file mode 100644
index 000000000..8386a0ab8
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/src/main.rs
@@ -0,0 +1,12 @@
+fn main() {
+ let x = Some(5);
+ let y = 10;
+
+ match x {
+ Some(50) => println!("Got 50"),
+ Some(n) if n == y => println!("Matched, n = {n}"),
+ _ => println!("Default case, x = {:?}", x),
+ }
+
+ println!("at the end: x = {:?}, y = {y}", x);
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/src/main.rs
new file mode 100644
index 000000000..15804553f
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let x = 4;
+ let y = false;
+
+ match x {
+ 4 | 5 | 6 if y => println!("yes"),
+ _ => println!("no"),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/src/main.rs
new file mode 100644
index 000000000..3514deb63
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/src/main.rs
@@ -0,0 +1,19 @@
+fn main() {
+ // ANCHOR: here
+ enum Message {
+ Hello { id: i32 },
+ }
+
+ let msg = Message::Hello { id: 5 };
+
+ match msg {
+ Message::Hello {
+ id: id_variable @ 3..=7,
+ } => println!("Found an id in range: {}", id_variable),
+ Message::Hello { id: 10..=12 } => {
+ println!("Found an id in another range")
+ }
+ Message::Hello { id } => println!("Found some other id: {}", id),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/src/main.rs
new file mode 100644
index 000000000..7978e1ade
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/src/main.rs
@@ -0,0 +1,12 @@
+fn main() {
+ // ANCHOR: here
+ let x = 1;
+
+ match x {
+ 1 => println!("one"),
+ 2 => println!("two"),
+ 3 => println!("three"),
+ _ => println!("anything"),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs
new file mode 100644
index 000000000..e52d815d8
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let x = 1;
+
+ match x {
+ 1 | 2 => println!("one or two"),
+ 3 => println!("three"),
+ _ => println!("anything"),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/src/main.rs
new file mode 100644
index 000000000..a3ebe7af0
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ // ANCHOR: here
+ let x = 5;
+
+ match x {
+ 1..=5 => println!("one through five"),
+ _ => println!("something else"),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs
new file mode 100644
index 000000000..8cebfef5e
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let x = 'c';
+
+ match x {
+ 'a'..='j' => println!("early ASCII letter"),
+ 'k'..='z' => println!("late ASCII letter"),
+ _ => println!("something else"),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs
new file mode 100644
index 000000000..962d09349
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ struct Point {
+ x: i32,
+ y: i32,
+ }
+
+ // ANCHOR: here
+ let ((feet, inches), Point { x, y }) = ((3, 10), Point { x: 3, y: -10 });
+ // ANCHOR_END: here
+}