diff --git a/Cargo.lock b/Cargo.lock
index 3fbf7d04a4..be5f6baa91 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1564,6 +1564,15 @@ version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "siphasher"
version = "0.3.11"
@@ -1751,7 +1760,9 @@ dependencies = [
"libc",
"mio",
"num_cpus",
+ "parking_lot",
"pin-project-lite",
+ "signal-hook-registry",
"socket2",
"tokio-macros",
"windows-sys 0.48.0",
@@ -1835,6 +1846,13 @@ dependencies = [
"once_cell",
]
+[[package]]
+name = "trpl"
+version = "0.1.0"
+dependencies = [
+ "tokio",
+]
+
[[package]]
name = "try-lock"
version = "0.2.5"
diff --git a/listings/ch17-oop/listing-17-01/Cargo.lock b/listings/ch18-oop/listing-18-01/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-01/Cargo.lock
rename to listings/ch18-oop/listing-18-01/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-01/Cargo.toml b/listings/ch18-oop/listing-18-01/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-01/Cargo.toml
rename to listings/ch18-oop/listing-18-01/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-01/src/lib.rs b/listings/ch18-oop/listing-18-01/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-01/src/lib.rs
rename to listings/ch18-oop/listing-18-01/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-02/Cargo.lock b/listings/ch18-oop/listing-18-02/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-02/Cargo.lock
rename to listings/ch18-oop/listing-18-02/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-02/Cargo.toml b/listings/ch18-oop/listing-18-02/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-02/Cargo.toml
rename to listings/ch18-oop/listing-18-02/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-02/src/lib.rs b/listings/ch18-oop/listing-18-02/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-02/src/lib.rs
rename to listings/ch18-oop/listing-18-02/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-03/Cargo.lock b/listings/ch18-oop/listing-18-03/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-03/Cargo.lock
rename to listings/ch18-oop/listing-18-03/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-03/Cargo.toml b/listings/ch18-oop/listing-18-03/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-03/Cargo.toml
rename to listings/ch18-oop/listing-18-03/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-03/src/lib.rs b/listings/ch18-oop/listing-18-03/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-03/src/lib.rs
rename to listings/ch18-oop/listing-18-03/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-04/Cargo.lock b/listings/ch18-oop/listing-18-04/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-04/Cargo.lock
rename to listings/ch18-oop/listing-18-04/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-04/Cargo.toml b/listings/ch18-oop/listing-18-04/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-04/Cargo.toml
rename to listings/ch18-oop/listing-18-04/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-04/src/lib.rs b/listings/ch18-oop/listing-18-04/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-04/src/lib.rs
rename to listings/ch18-oop/listing-18-04/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-05/Cargo.lock b/listings/ch18-oop/listing-18-05/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-05/Cargo.lock
rename to listings/ch18-oop/listing-18-05/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-05/Cargo.toml b/listings/ch18-oop/listing-18-05/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-05/Cargo.toml
rename to listings/ch18-oop/listing-18-05/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-05/src/lib.rs b/listings/ch18-oop/listing-18-05/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-05/src/lib.rs
rename to listings/ch18-oop/listing-18-05/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-06/Cargo.lock b/listings/ch18-oop/listing-18-06/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-06/Cargo.lock
rename to listings/ch18-oop/listing-18-06/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-06/Cargo.toml b/listings/ch18-oop/listing-18-06/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-06/Cargo.toml
rename to listings/ch18-oop/listing-18-06/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-06/src/lib.rs b/listings/ch18-oop/listing-18-06/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-06/src/lib.rs
rename to listings/ch18-oop/listing-18-06/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-07/Cargo.lock b/listings/ch18-oop/listing-18-07/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-07/Cargo.lock
rename to listings/ch18-oop/listing-18-07/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-07/Cargo.toml b/listings/ch18-oop/listing-18-07/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-07/Cargo.toml
rename to listings/ch18-oop/listing-18-07/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-07/src/lib.rs b/listings/ch18-oop/listing-18-07/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-07/src/lib.rs
rename to listings/ch18-oop/listing-18-07/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-08/Cargo.lock b/listings/ch18-oop/listing-18-08/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-08/Cargo.lock
rename to listings/ch18-oop/listing-18-08/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-08/Cargo.toml b/listings/ch18-oop/listing-18-08/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-08/Cargo.toml
rename to listings/ch18-oop/listing-18-08/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-08/src/lib.rs b/listings/ch18-oop/listing-18-08/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-08/src/lib.rs
rename to listings/ch18-oop/listing-18-08/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-08/src/main.rs b/listings/ch18-oop/listing-18-08/src/main.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-08/src/main.rs
rename to listings/ch18-oop/listing-18-08/src/main.rs
diff --git a/listings/ch17-oop/listing-17-09/Cargo.lock b/listings/ch18-oop/listing-18-09/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-09/Cargo.lock
rename to listings/ch18-oop/listing-18-09/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-09/Cargo.toml b/listings/ch18-oop/listing-18-09/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-09/Cargo.toml
rename to listings/ch18-oop/listing-18-09/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-09/src/lib.rs b/listings/ch18-oop/listing-18-09/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-09/src/lib.rs
rename to listings/ch18-oop/listing-18-09/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-09/src/main.rs b/listings/ch18-oop/listing-18-09/src/main.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-09/src/main.rs
rename to listings/ch18-oop/listing-18-09/src/main.rs
diff --git a/listings/ch17-oop/listing-17-10/Cargo.lock b/listings/ch18-oop/listing-18-10/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-10/Cargo.lock
rename to listings/ch18-oop/listing-18-10/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-10/Cargo.toml b/listings/ch18-oop/listing-18-10/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-10/Cargo.toml
rename to listings/ch18-oop/listing-18-10/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-10/output.txt b/listings/ch18-oop/listing-18-10/output.txt
similarity index 100%
rename from listings/ch17-oop/listing-17-10/output.txt
rename to listings/ch18-oop/listing-18-10/output.txt
diff --git a/listings/ch17-oop/listing-17-10/src/lib.rs b/listings/ch18-oop/listing-18-10/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-10/src/lib.rs
rename to listings/ch18-oop/listing-18-10/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-10/src/main.rs b/listings/ch18-oop/listing-18-10/src/main.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-10/src/main.rs
rename to listings/ch18-oop/listing-18-10/src/main.rs
diff --git a/listings/ch17-oop/listing-17-11/Cargo.lock b/listings/ch18-oop/listing-18-11/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-11/Cargo.lock
rename to listings/ch18-oop/listing-18-11/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-11/Cargo.toml b/listings/ch18-oop/listing-18-11/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-11/Cargo.toml
rename to listings/ch18-oop/listing-18-11/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-11/src/main.rs b/listings/ch18-oop/listing-18-11/src/main.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-11/src/main.rs
rename to listings/ch18-oop/listing-18-11/src/main.rs
diff --git a/listings/ch17-oop/listing-17-12/Cargo.lock b/listings/ch18-oop/listing-18-12/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-12/Cargo.lock
rename to listings/ch18-oop/listing-18-12/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-12/Cargo.toml b/listings/ch18-oop/listing-18-12/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-12/Cargo.toml
rename to listings/ch18-oop/listing-18-12/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-12/src/lib.rs b/listings/ch18-oop/listing-18-12/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-12/src/lib.rs
rename to listings/ch18-oop/listing-18-12/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-12/src/main.rs b/listings/ch18-oop/listing-18-12/src/main.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-12/src/main.rs
rename to listings/ch18-oop/listing-18-12/src/main.rs
diff --git a/listings/ch17-oop/listing-17-13/Cargo.lock b/listings/ch18-oop/listing-18-13/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-13/Cargo.lock
rename to listings/ch18-oop/listing-18-13/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-13/Cargo.toml b/listings/ch18-oop/listing-18-13/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-13/Cargo.toml
rename to listings/ch18-oop/listing-18-13/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-13/src/lib.rs b/listings/ch18-oop/listing-18-13/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-13/src/lib.rs
rename to listings/ch18-oop/listing-18-13/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-13/src/main.rs b/listings/ch18-oop/listing-18-13/src/main.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-13/src/main.rs
rename to listings/ch18-oop/listing-18-13/src/main.rs
diff --git a/listings/ch17-oop/listing-17-14/Cargo.lock b/listings/ch18-oop/listing-18-14/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-14/Cargo.lock
rename to listings/ch18-oop/listing-18-14/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-14/Cargo.toml b/listings/ch18-oop/listing-18-14/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-14/Cargo.toml
rename to listings/ch18-oop/listing-18-14/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-14/src/lib.rs b/listings/ch18-oop/listing-18-14/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-14/src/lib.rs
rename to listings/ch18-oop/listing-18-14/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-14/src/main.rs b/listings/ch18-oop/listing-18-14/src/main.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-14/src/main.rs
rename to listings/ch18-oop/listing-18-14/src/main.rs
diff --git a/listings/ch17-oop/listing-17-15/Cargo.lock b/listings/ch18-oop/listing-18-15/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-15/Cargo.lock
rename to listings/ch18-oop/listing-18-15/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-15/Cargo.toml b/listings/ch18-oop/listing-18-15/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-15/Cargo.toml
rename to listings/ch18-oop/listing-18-15/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-15/src/lib.rs b/listings/ch18-oop/listing-18-15/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-15/src/lib.rs
rename to listings/ch18-oop/listing-18-15/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-15/src/main.rs b/listings/ch18-oop/listing-18-15/src/main.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-15/src/main.rs
rename to listings/ch18-oop/listing-18-15/src/main.rs
diff --git a/listings/ch17-oop/listing-17-16/Cargo.lock b/listings/ch18-oop/listing-18-16/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-16/Cargo.lock
rename to listings/ch18-oop/listing-18-16/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-16/Cargo.toml b/listings/ch18-oop/listing-18-16/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-16/Cargo.toml
rename to listings/ch18-oop/listing-18-16/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-16/src/lib.rs b/listings/ch18-oop/listing-18-16/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-16/src/lib.rs
rename to listings/ch18-oop/listing-18-16/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-16/src/main.rs b/listings/ch18-oop/listing-18-16/src/main.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-16/src/main.rs
rename to listings/ch18-oop/listing-18-16/src/main.rs
diff --git a/listings/ch17-oop/listing-17-17/Cargo.lock b/listings/ch18-oop/listing-18-17/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-17/Cargo.lock
rename to listings/ch18-oop/listing-18-17/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-17/Cargo.toml b/listings/ch18-oop/listing-18-17/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-17/Cargo.toml
rename to listings/ch18-oop/listing-18-17/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-17/src/lib.rs b/listings/ch18-oop/listing-18-17/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-17/src/lib.rs
rename to listings/ch18-oop/listing-18-17/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-17/src/main.rs b/listings/ch18-oop/listing-18-17/src/main.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-17/src/main.rs
rename to listings/ch18-oop/listing-18-17/src/main.rs
diff --git a/listings/ch17-oop/listing-17-18/Cargo.lock b/listings/ch18-oop/listing-18-18/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-18/Cargo.lock
rename to listings/ch18-oop/listing-18-18/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-18/Cargo.toml b/listings/ch18-oop/listing-18-18/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-18/Cargo.toml
rename to listings/ch18-oop/listing-18-18/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-18/src/lib.rs b/listings/ch18-oop/listing-18-18/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-18/src/lib.rs
rename to listings/ch18-oop/listing-18-18/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-18/src/main.rs b/listings/ch18-oop/listing-18-18/src/main.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-18/src/main.rs
rename to listings/ch18-oop/listing-18-18/src/main.rs
diff --git a/listings/ch17-oop/listing-17-19/Cargo.lock b/listings/ch18-oop/listing-18-19/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-19/Cargo.lock
rename to listings/ch18-oop/listing-18-19/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-19/Cargo.toml b/listings/ch18-oop/listing-18-19/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-19/Cargo.toml
rename to listings/ch18-oop/listing-18-19/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-19/src/lib.rs b/listings/ch18-oop/listing-18-19/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-19/src/lib.rs
rename to listings/ch18-oop/listing-18-19/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-20/Cargo.lock b/listings/ch18-oop/listing-18-20/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-20/Cargo.lock
rename to listings/ch18-oop/listing-18-20/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-20/Cargo.toml b/listings/ch18-oop/listing-18-20/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-20/Cargo.toml
rename to listings/ch18-oop/listing-18-20/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-20/src/lib.rs b/listings/ch18-oop/listing-18-20/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-20/src/lib.rs
rename to listings/ch18-oop/listing-18-20/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-21/Cargo.lock b/listings/ch18-oop/listing-18-21/Cargo.lock
similarity index 100%
rename from listings/ch17-oop/listing-17-21/Cargo.lock
rename to listings/ch18-oop/listing-18-21/Cargo.lock
diff --git a/listings/ch17-oop/listing-17-21/Cargo.toml b/listings/ch18-oop/listing-18-21/Cargo.toml
similarity index 100%
rename from listings/ch17-oop/listing-17-21/Cargo.toml
rename to listings/ch18-oop/listing-18-21/Cargo.toml
diff --git a/listings/ch17-oop/listing-17-21/src/lib.rs b/listings/ch18-oop/listing-18-21/src/lib.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-21/src/lib.rs
rename to listings/ch18-oop/listing-18-21/src/lib.rs
diff --git a/listings/ch17-oop/listing-17-21/src/main.rs b/listings/ch18-oop/listing-18-21/src/main.rs
similarity index 100%
rename from listings/ch17-oop/listing-17-21/src/main.rs
rename to listings/ch18-oop/listing-18-21/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-01/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-01/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-01/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-01/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-01/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-01/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-01/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-01/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-01/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-01/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-01/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-01/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-02/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-02/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-02/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-02/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-02/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-02/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-02/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-02/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-02/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-02/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-02/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-02/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-03/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-03/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-03/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-03/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-03/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-03/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-03/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-03/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-03/output.txt b/listings/ch19-patterns-and-matching/listing-19-03/output.txt
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-03/output.txt
rename to listings/ch19-patterns-and-matching/listing-19-03/output.txt
diff --git a/listings/ch18-patterns-and-matching/listing-18-03/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-03/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-03/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-03/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-04/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-04/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-04/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-04/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-04/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-04/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-04/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-04/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-04/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-04/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-04/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-04/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-05/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-05/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-05/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-05/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-05/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-05/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-05/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-05/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-05/output.txt b/listings/ch19-patterns-and-matching/listing-19-05/output.txt
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-05/output.txt
rename to listings/ch19-patterns-and-matching/listing-19-05/output.txt
diff --git a/listings/ch18-patterns-and-matching/listing-18-05/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-05/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-05/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-05/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-06/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-06/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-06/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-06/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-06/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-06/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-06/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-06/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-06/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-06/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-06/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-06/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-07/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-07/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-07/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-07/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-07/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-07/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-07/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-07/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-07/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-07/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-07/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-07/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-08/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-08/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-08/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-08/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-08/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-08/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-08/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-08/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-08/output.txt b/listings/ch19-patterns-and-matching/listing-19-08/output.txt
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-08/output.txt
rename to listings/ch19-patterns-and-matching/listing-19-08/output.txt
diff --git a/listings/ch18-patterns-and-matching/listing-18-08/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-08/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-08/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-08/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-09/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-09/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-09/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-09/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-09/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-09/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-09/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-09/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-09/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-09/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-09/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-09/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-10/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-10/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-10/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-10/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-10/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-10/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-10/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-10/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-10/output.txt b/listings/ch19-patterns-and-matching/listing-19-10/output.txt
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-10/output.txt
rename to listings/ch19-patterns-and-matching/listing-19-10/output.txt
diff --git a/listings/ch18-patterns-and-matching/listing-18-10/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-10/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-10/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-10/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-11/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-11/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-11/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-11/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-11/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-11/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-11/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-11/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-11/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-11/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-11/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-11/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-12/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-12/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-12/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-12/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-12/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-12/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-12/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-12/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-12/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-12/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-12/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-12/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-13/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-13/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-13/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-13/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-13/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-13/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-13/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-13/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-13/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-13/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-13/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-13/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-14/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-14/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-14/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-14/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-14/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-14/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-14/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-14/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-14/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-14/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-14/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-14/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-15/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-15/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-15/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-15/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-15/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-15/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-15/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-15/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-15/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-15/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-15/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-15/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-16/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-16/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-16/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-16/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-16/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-16/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-16/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-16/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-16/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-16/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-16/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-16/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-17/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-17/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-17/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-17/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-17/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-17/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-17/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-17/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-17/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-17/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-17/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-17/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-18/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-18/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-18/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-18/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-18/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-18/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-18/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-18/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-18/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-18/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-18/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-18/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-19/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-19/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-19/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-19/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-19/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-19/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-19/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-19/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-19/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-19/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-19/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-19/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-20/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-20/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-20/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-20/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-20/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-20/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-20/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-20/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-20/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-20/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-20/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-20/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-21/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-21/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-21/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-21/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-21/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-21/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-21/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-21/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-21/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-21/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-21/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-21/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-22/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-22/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-22/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-22/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-22/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-22/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-22/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-22/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-22/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-22/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-22/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-22/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-23/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-23/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-23/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-23/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-23/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-23/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-23/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-23/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-23/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-23/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-23/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-23/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-24/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-24/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-24/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-24/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-24/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-24/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-24/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-24/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-24/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-24/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-24/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-24/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-25/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-25/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-25/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-25/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-25/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-25/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-25/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-25/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-25/output.txt b/listings/ch19-patterns-and-matching/listing-19-25/output.txt
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-25/output.txt
rename to listings/ch19-patterns-and-matching/listing-19-25/output.txt
diff --git a/listings/ch18-patterns-and-matching/listing-18-25/rustfmt-ignore b/listings/ch19-patterns-and-matching/listing-19-25/rustfmt-ignore
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-25/rustfmt-ignore
rename to listings/ch19-patterns-and-matching/listing-19-25/rustfmt-ignore
diff --git a/listings/ch18-patterns-and-matching/listing-18-25/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-25/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-25/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-25/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-26/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-26/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-26/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-26/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-26/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-26/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-26/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-26/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-26/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-26/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-26/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-26/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-27/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-27/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-27/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-27/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-27/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-27/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-27/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-27/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-27/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-27/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-27/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-27/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-28/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-28/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-28/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-28/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-28/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-28/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-28/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-28/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-28/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-28/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-28/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-28/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/listing-18-29/Cargo.lock b/listings/ch19-patterns-and-matching/listing-19-29/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-29/Cargo.lock
rename to listings/ch19-patterns-and-matching/listing-19-29/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/listing-18-29/Cargo.toml b/listings/ch19-patterns-and-matching/listing-19-29/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-29/Cargo.toml
rename to listings/ch19-patterns-and-matching/listing-19-29/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/listing-18-29/src/main.rs b/listings/ch19-patterns-and-matching/listing-19-29/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/listing-18-29/src/main.rs
rename to listings/ch19-patterns-and-matching/listing-19-29/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.lock b/listings/ch19-patterns-and-matching/no-listing-01-literals/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.lock
rename to listings/ch19-patterns-and-matching/no-listing-01-literals/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.toml b/listings/ch19-patterns-and-matching/no-listing-01-literals/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.toml
rename to listings/ch19-patterns-and-matching/no-listing-01-literals/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/no-listing-01-literals/src/main.rs b/listings/ch19-patterns-and-matching/no-listing-01-literals/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-01-literals/src/main.rs
rename to listings/ch19-patterns-and-matching/no-listing-01-literals/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.lock b/listings/ch19-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.lock
rename to listings/ch19-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.toml b/listings/ch19-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.toml
rename to listings/ch19-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs b/listings/ch19-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs
rename to listings/ch19-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.lock b/listings/ch19-patterns-and-matching/no-listing-03-ranges/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.lock
rename to listings/ch19-patterns-and-matching/no-listing-03-ranges/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.toml b/listings/ch19-patterns-and-matching/no-listing-03-ranges/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.toml
rename to listings/ch19-patterns-and-matching/no-listing-03-ranges/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/no-listing-03-ranges/src/main.rs b/listings/ch19-patterns-and-matching/no-listing-03-ranges/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-03-ranges/src/main.rs
rename to listings/ch19-patterns-and-matching/no-listing-03-ranges/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.lock b/listings/ch19-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.lock
rename to listings/ch19-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.toml b/listings/ch19-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.toml
rename to listings/ch19-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs b/listings/ch19-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs
rename to listings/ch19-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs
diff --git a/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.lock b/listings/ch19-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.lock
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.lock
rename to listings/ch19-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.lock
diff --git a/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.toml b/listings/ch19-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.toml
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.toml
rename to listings/ch19-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.toml
diff --git a/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs b/listings/ch19-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs
similarity index 100%
rename from listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs
rename to listings/ch19-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-01/Cargo.lock b/listings/ch20-advanced-features/listing-20-01/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-01/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-01/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-01/Cargo.toml b/listings/ch20-advanced-features/listing-20-01/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-01/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-01/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-01/src/main.rs b/listings/ch20-advanced-features/listing-20-01/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-01/src/main.rs
rename to listings/ch20-advanced-features/listing-20-01/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-02/Cargo.lock b/listings/ch20-advanced-features/listing-20-02/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-02/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-02/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-02/Cargo.toml b/listings/ch20-advanced-features/listing-20-02/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-02/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-02/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-02/src/main.rs b/listings/ch20-advanced-features/listing-20-02/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-02/src/main.rs
rename to listings/ch20-advanced-features/listing-20-02/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-03/Cargo.lock b/listings/ch20-advanced-features/listing-20-03/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-03/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-03/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-03/Cargo.toml b/listings/ch20-advanced-features/listing-20-03/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-03/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-03/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-03/src/main.rs b/listings/ch20-advanced-features/listing-20-03/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-03/src/main.rs
rename to listings/ch20-advanced-features/listing-20-03/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-04/Cargo.lock b/listings/ch20-advanced-features/listing-20-04/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-04/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-04/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-04/Cargo.toml b/listings/ch20-advanced-features/listing-20-04/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-04/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-04/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-04/src/main.rs b/listings/ch20-advanced-features/listing-20-04/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-04/src/main.rs
rename to listings/ch20-advanced-features/listing-20-04/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-05/Cargo.lock b/listings/ch20-advanced-features/listing-20-05/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-05/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-05/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-05/Cargo.toml b/listings/ch20-advanced-features/listing-20-05/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-05/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-05/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-05/output.txt b/listings/ch20-advanced-features/listing-20-05/output.txt
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-05/output.txt
rename to listings/ch20-advanced-features/listing-20-05/output.txt
diff --git a/listings/ch19-advanced-features/listing-19-05/src/main.rs b/listings/ch20-advanced-features/listing-20-05/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-05/src/main.rs
rename to listings/ch20-advanced-features/listing-20-05/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-06/Cargo.lock b/listings/ch20-advanced-features/listing-20-06/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-06/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-06/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-06/Cargo.toml b/listings/ch20-advanced-features/listing-20-06/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-06/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-06/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-06/src/main.rs b/listings/ch20-advanced-features/listing-20-06/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-06/src/main.rs
rename to listings/ch20-advanced-features/listing-20-06/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-07/Cargo.lock b/listings/ch20-advanced-features/listing-20-07/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-07/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-07/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-07/Cargo.toml b/listings/ch20-advanced-features/listing-20-07/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-07/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-07/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-07/src/main.rs b/listings/ch20-advanced-features/listing-20-07/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-07/src/main.rs
rename to listings/ch20-advanced-features/listing-20-07/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-08/Cargo.lock b/listings/ch20-advanced-features/listing-20-08/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-08/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-08/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-08/Cargo.toml b/listings/ch20-advanced-features/listing-20-08/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-08/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-08/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-08/src/main.rs b/listings/ch20-advanced-features/listing-20-08/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-08/src/main.rs
rename to listings/ch20-advanced-features/listing-20-08/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-09/Cargo.lock b/listings/ch20-advanced-features/listing-20-09/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-09/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-09/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-09/Cargo.toml b/listings/ch20-advanced-features/listing-20-09/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-09/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-09/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-09/src/main.rs b/listings/ch20-advanced-features/listing-20-09/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-09/src/main.rs
rename to listings/ch20-advanced-features/listing-20-09/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-10/Cargo.lock b/listings/ch20-advanced-features/listing-20-10/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-10/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-10/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-10/Cargo.toml b/listings/ch20-advanced-features/listing-20-10/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-10/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-10/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-10/src/main.rs b/listings/ch20-advanced-features/listing-20-10/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-10/src/main.rs
rename to listings/ch20-advanced-features/listing-20-10/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-11/Cargo.lock b/listings/ch20-advanced-features/listing-20-11/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-11/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-11/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-11/Cargo.toml b/listings/ch20-advanced-features/listing-20-11/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-11/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-11/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-11/src/main.rs b/listings/ch20-advanced-features/listing-20-11/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-11/src/main.rs
rename to listings/ch20-advanced-features/listing-20-11/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-12/Cargo.lock b/listings/ch20-advanced-features/listing-20-12/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-12/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-12/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-12/Cargo.toml b/listings/ch20-advanced-features/listing-20-12/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-12/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-12/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-12/src/lib.rs b/listings/ch20-advanced-features/listing-20-12/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-12/src/lib.rs
rename to listings/ch20-advanced-features/listing-20-12/src/lib.rs
diff --git a/listings/ch19-advanced-features/listing-19-13/Cargo.lock b/listings/ch20-advanced-features/listing-20-13/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-13/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-13/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-13/Cargo.toml b/listings/ch20-advanced-features/listing-20-13/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-13/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-13/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-13/src/lib.rs b/listings/ch20-advanced-features/listing-20-13/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-13/src/lib.rs
rename to listings/ch20-advanced-features/listing-20-13/src/lib.rs
diff --git a/listings/ch19-advanced-features/listing-19-14/Cargo.lock b/listings/ch20-advanced-features/listing-20-14/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-14/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-14/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-14/Cargo.toml b/listings/ch20-advanced-features/listing-20-14/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-14/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-14/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-14/src/main.rs b/listings/ch20-advanced-features/listing-20-14/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-14/src/main.rs
rename to listings/ch20-advanced-features/listing-20-14/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-15/Cargo.lock b/listings/ch20-advanced-features/listing-20-15/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-15/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-15/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-15/Cargo.toml b/listings/ch20-advanced-features/listing-20-15/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-15/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-15/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-15/src/lib.rs b/listings/ch20-advanced-features/listing-20-15/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-15/src/lib.rs
rename to listings/ch20-advanced-features/listing-20-15/src/lib.rs
diff --git a/listings/ch19-advanced-features/listing-19-16/Cargo.lock b/listings/ch20-advanced-features/listing-20-16/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-16/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-16/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-16/Cargo.toml b/listings/ch20-advanced-features/listing-20-16/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-16/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-16/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-16/src/main.rs b/listings/ch20-advanced-features/listing-20-16/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-16/src/main.rs
rename to listings/ch20-advanced-features/listing-20-16/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-17/Cargo.lock b/listings/ch20-advanced-features/listing-20-17/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-17/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-17/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-17/Cargo.toml b/listings/ch20-advanced-features/listing-20-17/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-17/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-17/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-17/src/main.rs b/listings/ch20-advanced-features/listing-20-17/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-17/src/main.rs
rename to listings/ch20-advanced-features/listing-20-17/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-18/Cargo.lock b/listings/ch20-advanced-features/listing-20-18/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-18/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-18/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-18/Cargo.toml b/listings/ch20-advanced-features/listing-20-18/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-18/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-18/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-18/output.txt b/listings/ch20-advanced-features/listing-20-18/output.txt
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-18/output.txt
rename to listings/ch20-advanced-features/listing-20-18/output.txt
diff --git a/listings/ch19-advanced-features/listing-19-18/src/main.rs b/listings/ch20-advanced-features/listing-20-18/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-18/src/main.rs
rename to listings/ch20-advanced-features/listing-20-18/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-19/Cargo.lock b/listings/ch20-advanced-features/listing-20-19/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-19/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-19/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-19/Cargo.toml b/listings/ch20-advanced-features/listing-20-19/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-19/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-19/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-19/output.txt b/listings/ch20-advanced-features/listing-20-19/output.txt
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-19/output.txt
rename to listings/ch20-advanced-features/listing-20-19/output.txt
diff --git a/listings/ch19-advanced-features/listing-19-19/src/main.rs b/listings/ch20-advanced-features/listing-20-19/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-19/src/main.rs
rename to listings/ch20-advanced-features/listing-20-19/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-20/Cargo.lock b/listings/ch20-advanced-features/listing-20-20/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-20/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-20/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-20/Cargo.toml b/listings/ch20-advanced-features/listing-20-20/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-20/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-20/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-20/output.txt b/listings/ch20-advanced-features/listing-20-20/output.txt
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-20/output.txt
rename to listings/ch20-advanced-features/listing-20-20/output.txt
diff --git a/listings/ch19-advanced-features/listing-19-20/src/main.rs b/listings/ch20-advanced-features/listing-20-20/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-20/src/main.rs
rename to listings/ch20-advanced-features/listing-20-20/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-21/Cargo.lock b/listings/ch20-advanced-features/listing-20-21/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-21/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-21/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-21/Cargo.toml b/listings/ch20-advanced-features/listing-20-21/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-21/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-21/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-21/output.txt b/listings/ch20-advanced-features/listing-20-21/output.txt
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-21/output.txt
rename to listings/ch20-advanced-features/listing-20-21/output.txt
diff --git a/listings/ch19-advanced-features/listing-19-21/src/main.rs b/listings/ch20-advanced-features/listing-20-21/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-21/src/main.rs
rename to listings/ch20-advanced-features/listing-20-21/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-22/Cargo.lock b/listings/ch20-advanced-features/listing-20-22/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-22/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-22/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-22/Cargo.toml b/listings/ch20-advanced-features/listing-20-22/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-22/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-22/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-22/src/main.rs b/listings/ch20-advanced-features/listing-20-22/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-22/src/main.rs
rename to listings/ch20-advanced-features/listing-20-22/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-23/Cargo.lock b/listings/ch20-advanced-features/listing-20-23/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-23/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-23/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-23/Cargo.toml b/listings/ch20-advanced-features/listing-20-23/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-23/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-23/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-23/src/main.rs b/listings/ch20-advanced-features/listing-20-23/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-23/src/main.rs
rename to listings/ch20-advanced-features/listing-20-23/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-24/Cargo.lock b/listings/ch20-advanced-features/listing-20-24/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-24/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-24/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-24/Cargo.toml b/listings/ch20-advanced-features/listing-20-24/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-24/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-24/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-24/src/main.rs b/listings/ch20-advanced-features/listing-20-24/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-24/src/main.rs
rename to listings/ch20-advanced-features/listing-20-24/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-25/Cargo.lock b/listings/ch20-advanced-features/listing-20-25/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-25/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-25/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-25/Cargo.toml b/listings/ch20-advanced-features/listing-20-25/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-25/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-25/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-25/src/main.rs b/listings/ch20-advanced-features/listing-20-25/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-25/src/main.rs
rename to listings/ch20-advanced-features/listing-20-25/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-27/Cargo.lock b/listings/ch20-advanced-features/listing-20-27/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-27/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-27/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-27/Cargo.toml b/listings/ch20-advanced-features/listing-20-27/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-27/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-27/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-27/src/main.rs b/listings/ch20-advanced-features/listing-20-27/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-27/src/main.rs
rename to listings/ch20-advanced-features/listing-20-27/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-28/Cargo.lock b/listings/ch20-advanced-features/listing-20-28/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-28/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-28/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-28/Cargo.toml b/listings/ch20-advanced-features/listing-20-28/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-28/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-28/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-28/src/lib.rs b/listings/ch20-advanced-features/listing-20-28/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-28/src/lib.rs
rename to listings/ch20-advanced-features/listing-20-28/src/lib.rs
diff --git a/listings/ch19-advanced-features/listing-19-30/Cargo.lock b/listings/ch20-advanced-features/listing-20-30/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-30/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-30/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-30/Cargo.toml b/listings/ch20-advanced-features/listing-20-30/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-30/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-30/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-30/src/main.rs b/listings/ch20-advanced-features/listing-20-30/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-30/src/main.rs
rename to listings/ch20-advanced-features/listing-20-30/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-31/hello_macro/Cargo.lock b/listings/ch20-advanced-features/listing-20-31/hello_macro/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-31/hello_macro/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-31/hello_macro/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-31/hello_macro/Cargo.toml b/listings/ch20-advanced-features/listing-20-31/hello_macro/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-31/hello_macro/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-31/hello_macro/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/Cargo.lock b/listings/ch20-advanced-features/listing-20-31/hello_macro/hello_macro_derive/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-31/hello_macro/hello_macro_derive/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/Cargo.toml b/listings/ch20-advanced-features/listing-20-31/hello_macro/hello_macro_derive/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-31/hello_macro/hello_macro_derive/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/src/lib.rs b/listings/ch20-advanced-features/listing-20-31/hello_macro/hello_macro_derive/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/src/lib.rs
rename to listings/ch20-advanced-features/listing-20-31/hello_macro/hello_macro_derive/src/lib.rs
diff --git a/listings/ch19-advanced-features/listing-19-31/hello_macro/src/lib.rs b/listings/ch20-advanced-features/listing-20-31/hello_macro/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-31/hello_macro/src/lib.rs
rename to listings/ch20-advanced-features/listing-20-31/hello_macro/src/lib.rs
diff --git a/listings/ch19-advanced-features/listing-19-31/hello_macro/src/main.rs b/listings/ch20-advanced-features/listing-20-31/hello_macro/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-31/hello_macro/src/main.rs
rename to listings/ch20-advanced-features/listing-20-31/hello_macro/src/main.rs
diff --git a/listings/ch19-advanced-features/listing-19-33/hello_macro/Cargo.lock b/listings/ch20-advanced-features/listing-20-33/hello_macro/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-33/hello_macro/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-33/hello_macro/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-33/hello_macro/Cargo.toml b/listings/ch20-advanced-features/listing-20-33/hello_macro/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-33/hello_macro/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-33/hello_macro/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/Cargo.lock b/listings/ch20-advanced-features/listing-20-33/hello_macro/hello_macro_derive/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/Cargo.lock
rename to listings/ch20-advanced-features/listing-20-33/hello_macro/hello_macro_derive/Cargo.lock
diff --git a/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/Cargo.toml b/listings/ch20-advanced-features/listing-20-33/hello_macro/hello_macro_derive/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/Cargo.toml
rename to listings/ch20-advanced-features/listing-20-33/hello_macro/hello_macro_derive/Cargo.toml
diff --git a/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/src/lib.rs b/listings/ch20-advanced-features/listing-20-33/hello_macro/hello_macro_derive/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/src/lib.rs
rename to listings/ch20-advanced-features/listing-20-33/hello_macro/hello_macro_derive/src/lib.rs
diff --git a/listings/ch19-advanced-features/listing-19-33/hello_macro/src/lib.rs b/listings/ch20-advanced-features/listing-20-33/hello_macro/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-33/hello_macro/src/lib.rs
rename to listings/ch20-advanced-features/listing-20-33/hello_macro/src/lib.rs
diff --git a/listings/ch19-advanced-features/listing-19-33/hello_macro/src/main.rs b/listings/ch20-advanced-features/listing-20-33/hello_macro/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/listing-19-33/hello_macro/src/main.rs
rename to listings/ch20-advanced-features/listing-20-33/hello_macro/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-01-unsafe-fn/Cargo.lock b/listings/ch20-advanced-features/no-listing-01-unsafe-fn/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-01-unsafe-fn/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-01-unsafe-fn/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-01-unsafe-fn/Cargo.toml b/listings/ch20-advanced-features/no-listing-01-unsafe-fn/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-01-unsafe-fn/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-01-unsafe-fn/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-01-unsafe-fn/src/main.rs b/listings/ch20-advanced-features/no-listing-01-unsafe-fn/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-01-unsafe-fn/src/main.rs
rename to listings/ch20-advanced-features/no-listing-01-unsafe-fn/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.lock b/listings/ch20-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.toml b/listings/ch20-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/output.txt b/listings/ch20-advanced-features/no-listing-02-impl-outlineprint-for-point/output.txt
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/output.txt
rename to listings/ch20-advanced-features/no-listing-02-impl-outlineprint-for-point/output.txt
diff --git a/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/src/main.rs b/listings/ch20-advanced-features/no-listing-02-impl-outlineprint-for-point/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/src/main.rs
rename to listings/ch20-advanced-features/no-listing-02-impl-outlineprint-for-point/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/Cargo.lock b/listings/ch20-advanced-features/no-listing-03-impl-display-for-point/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-03-impl-display-for-point/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-03-impl-display-for-point/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/Cargo.toml b/listings/ch20-advanced-features/no-listing-03-impl-display-for-point/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-03-impl-display-for-point/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-03-impl-display-for-point/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/src/main.rs b/listings/ch20-advanced-features/no-listing-03-impl-display-for-point/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-03-impl-display-for-point/src/main.rs
rename to listings/ch20-advanced-features/no-listing-03-impl-display-for-point/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-04-kilometers-alias/Cargo.lock b/listings/ch20-advanced-features/no-listing-04-kilometers-alias/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-04-kilometers-alias/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-04-kilometers-alias/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-04-kilometers-alias/Cargo.toml b/listings/ch20-advanced-features/no-listing-04-kilometers-alias/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-04-kilometers-alias/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-04-kilometers-alias/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-04-kilometers-alias/src/main.rs b/listings/ch20-advanced-features/no-listing-04-kilometers-alias/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-04-kilometers-alias/src/main.rs
rename to listings/ch20-advanced-features/no-listing-04-kilometers-alias/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-05-write-trait/Cargo.lock b/listings/ch20-advanced-features/no-listing-05-write-trait/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-05-write-trait/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-05-write-trait/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-05-write-trait/Cargo.toml b/listings/ch20-advanced-features/no-listing-05-write-trait/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-05-write-trait/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-05-write-trait/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-05-write-trait/src/lib.rs b/listings/ch20-advanced-features/no-listing-05-write-trait/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-05-write-trait/src/lib.rs
rename to listings/ch20-advanced-features/no-listing-05-write-trait/src/lib.rs
diff --git a/listings/ch19-advanced-features/no-listing-06-result-alias/Cargo.lock b/listings/ch20-advanced-features/no-listing-06-result-alias/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-06-result-alias/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-06-result-alias/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-06-result-alias/Cargo.toml b/listings/ch20-advanced-features/no-listing-06-result-alias/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-06-result-alias/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-06-result-alias/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-06-result-alias/src/lib.rs b/listings/ch20-advanced-features/no-listing-06-result-alias/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-06-result-alias/src/lib.rs
rename to listings/ch20-advanced-features/no-listing-06-result-alias/src/lib.rs
diff --git a/listings/ch19-advanced-features/no-listing-07-never-type/Cargo.lock b/listings/ch20-advanced-features/no-listing-07-never-type/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-07-never-type/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-07-never-type/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-07-never-type/Cargo.toml b/listings/ch20-advanced-features/no-listing-07-never-type/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-07-never-type/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-07-never-type/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-07-never-type/src/lib.rs b/listings/ch20-advanced-features/no-listing-07-never-type/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-07-never-type/src/lib.rs
rename to listings/ch20-advanced-features/no-listing-07-never-type/src/lib.rs
diff --git a/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/Cargo.lock b/listings/ch20-advanced-features/no-listing-08-match-arms-different-types/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-08-match-arms-different-types/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-08-match-arms-different-types/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/Cargo.toml b/listings/ch20-advanced-features/no-listing-08-match-arms-different-types/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-08-match-arms-different-types/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-08-match-arms-different-types/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/src/main.rs b/listings/ch20-advanced-features/no-listing-08-match-arms-different-types/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-08-match-arms-different-types/src/main.rs
rename to listings/ch20-advanced-features/no-listing-08-match-arms-different-types/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-09-unwrap-definition/Cargo.lock b/listings/ch20-advanced-features/no-listing-09-unwrap-definition/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-09-unwrap-definition/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-09-unwrap-definition/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-09-unwrap-definition/Cargo.toml b/listings/ch20-advanced-features/no-listing-09-unwrap-definition/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-09-unwrap-definition/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-09-unwrap-definition/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-09-unwrap-definition/src/lib.rs b/listings/ch20-advanced-features/no-listing-09-unwrap-definition/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-09-unwrap-definition/src/lib.rs
rename to listings/ch20-advanced-features/no-listing-09-unwrap-definition/src/lib.rs
diff --git a/listings/ch19-advanced-features/no-listing-10-loop-returns-never/Cargo.lock b/listings/ch20-advanced-features/no-listing-10-loop-returns-never/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-10-loop-returns-never/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-10-loop-returns-never/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-10-loop-returns-never/Cargo.toml b/listings/ch20-advanced-features/no-listing-10-loop-returns-never/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-10-loop-returns-never/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-10-loop-returns-never/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-10-loop-returns-never/src/main.rs b/listings/ch20-advanced-features/no-listing-10-loop-returns-never/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-10-loop-returns-never/src/main.rs
rename to listings/ch20-advanced-features/no-listing-10-loop-returns-never/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-11-cant-create-str/Cargo.lock b/listings/ch20-advanced-features/no-listing-11-cant-create-str/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-11-cant-create-str/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-11-cant-create-str/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-11-cant-create-str/Cargo.toml b/listings/ch20-advanced-features/no-listing-11-cant-create-str/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-11-cant-create-str/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-11-cant-create-str/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-11-cant-create-str/src/main.rs b/listings/ch20-advanced-features/no-listing-11-cant-create-str/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-11-cant-create-str/src/main.rs
rename to listings/ch20-advanced-features/no-listing-11-cant-create-str/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/Cargo.lock b/listings/ch20-advanced-features/no-listing-12-generic-fn-definition/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-12-generic-fn-definition/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-12-generic-fn-definition/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/Cargo.toml b/listings/ch20-advanced-features/no-listing-12-generic-fn-definition/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-12-generic-fn-definition/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-12-generic-fn-definition/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/src/lib.rs b/listings/ch20-advanced-features/no-listing-12-generic-fn-definition/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-12-generic-fn-definition/src/lib.rs
rename to listings/ch20-advanced-features/no-listing-12-generic-fn-definition/src/lib.rs
diff --git a/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.lock b/listings/ch20-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.toml b/listings/ch20-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/src/lib.rs b/listings/ch20-advanced-features/no-listing-13-generic-implicit-sized-bound/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/src/lib.rs
rename to listings/ch20-advanced-features/no-listing-13-generic-implicit-sized-bound/src/lib.rs
diff --git a/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/Cargo.lock b/listings/ch20-advanced-features/no-listing-14-generic-maybe-sized/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-14-generic-maybe-sized/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/Cargo.toml b/listings/ch20-advanced-features/no-listing-14-generic-maybe-sized/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-14-generic-maybe-sized/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/src/lib.rs b/listings/ch20-advanced-features/no-listing-14-generic-maybe-sized/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/src/lib.rs
rename to listings/ch20-advanced-features/no-listing-14-generic-maybe-sized/src/lib.rs
diff --git a/listings/ch19-advanced-features/no-listing-15-map-closure/Cargo.lock b/listings/ch20-advanced-features/no-listing-15-map-closure/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-15-map-closure/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-15-map-closure/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-15-map-closure/Cargo.toml b/listings/ch20-advanced-features/no-listing-15-map-closure/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-15-map-closure/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-15-map-closure/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-15-map-closure/src/main.rs b/listings/ch20-advanced-features/no-listing-15-map-closure/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-15-map-closure/src/main.rs
rename to listings/ch20-advanced-features/no-listing-15-map-closure/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-16-map-function/Cargo.lock b/listings/ch20-advanced-features/no-listing-16-map-function/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-16-map-function/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-16-map-function/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-16-map-function/Cargo.toml b/listings/ch20-advanced-features/no-listing-16-map-function/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-16-map-function/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-16-map-function/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-16-map-function/src/main.rs b/listings/ch20-advanced-features/no-listing-16-map-function/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-16-map-function/src/main.rs
rename to listings/ch20-advanced-features/no-listing-16-map-function/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-17-map-initializer/Cargo.lock b/listings/ch20-advanced-features/no-listing-17-map-initializer/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-17-map-initializer/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-17-map-initializer/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-17-map-initializer/Cargo.toml b/listings/ch20-advanced-features/no-listing-17-map-initializer/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-17-map-initializer/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-17-map-initializer/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-17-map-initializer/src/main.rs b/listings/ch20-advanced-features/no-listing-17-map-initializer/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-17-map-initializer/src/main.rs
rename to listings/ch20-advanced-features/no-listing-17-map-initializer/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-18-returns-closure/Cargo.lock b/listings/ch20-advanced-features/no-listing-18-returns-closure/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-18-returns-closure/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-18-returns-closure/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-18-returns-closure/Cargo.toml b/listings/ch20-advanced-features/no-listing-18-returns-closure/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-18-returns-closure/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-18-returns-closure/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-18-returns-closure/output.txt b/listings/ch20-advanced-features/no-listing-18-returns-closure/output.txt
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-18-returns-closure/output.txt
rename to listings/ch20-advanced-features/no-listing-18-returns-closure/output.txt
diff --git a/listings/ch19-advanced-features/no-listing-18-returns-closure/src/lib.rs b/listings/ch20-advanced-features/no-listing-18-returns-closure/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-18-returns-closure/src/lib.rs
rename to listings/ch20-advanced-features/no-listing-18-returns-closure/src/lib.rs
diff --git a/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.lock b/listings/ch20-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.toml b/listings/ch20-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/src/lib.rs b/listings/ch20-advanced-features/no-listing-19-returns-closure-trait-object/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/src/lib.rs
rename to listings/ch20-advanced-features/no-listing-19-returns-closure-trait-object/src/lib.rs
diff --git a/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.lock b/listings/ch20-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.toml b/listings/ch20-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/src/lib.rs b/listings/ch20-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/src/lib.rs
rename to listings/ch20-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/src/lib.rs
diff --git a/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.lock b/listings/ch20-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.toml b/listings/ch20-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/src/main.rs b/listings/ch20-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/src/main.rs
rename to listings/ch20-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.lock b/listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.toml b/listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.lock b/listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.toml b/listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/src/lib.rs b/listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/src/lib.rs
rename to listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/src/lib.rs
diff --git a/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/src/lib.rs b/listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/src/lib.rs
rename to listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/src/lib.rs
diff --git a/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/src/main.rs b/listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/src/main.rs
rename to listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/Cargo.lock b/listings/ch20-advanced-features/no-listing-21-pancakes/pancakes/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-21-pancakes/pancakes/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/Cargo.toml b/listings/ch20-advanced-features/no-listing-21-pancakes/pancakes/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-21-pancakes/pancakes/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/src/main.rs b/listings/ch20-advanced-features/no-listing-21-pancakes/pancakes/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/src/main.rs
rename to listings/ch20-advanced-features/no-listing-21-pancakes/pancakes/src/main.rs
diff --git a/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/Cargo.lock b/listings/ch20-advanced-features/no-listing-22-iterator-on-counter/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-22-iterator-on-counter/Cargo.lock
rename to listings/ch20-advanced-features/no-listing-22-iterator-on-counter/Cargo.lock
diff --git a/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/Cargo.toml b/listings/ch20-advanced-features/no-listing-22-iterator-on-counter/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-22-iterator-on-counter/Cargo.toml
rename to listings/ch20-advanced-features/no-listing-22-iterator-on-counter/Cargo.toml
diff --git a/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/src/lib.rs b/listings/ch20-advanced-features/no-listing-22-iterator-on-counter/src/lib.rs
similarity index 100%
rename from listings/ch19-advanced-features/no-listing-22-iterator-on-counter/src/lib.rs
rename to listings/ch20-advanced-features/no-listing-22-iterator-on-counter/src/lib.rs
diff --git a/listings/ch19-advanced-features/output-only-01-missing-unsafe/Cargo.lock b/listings/ch20-advanced-features/output-only-01-missing-unsafe/Cargo.lock
similarity index 100%
rename from listings/ch19-advanced-features/output-only-01-missing-unsafe/Cargo.lock
rename to listings/ch20-advanced-features/output-only-01-missing-unsafe/Cargo.lock
diff --git a/listings/ch19-advanced-features/output-only-01-missing-unsafe/Cargo.toml b/listings/ch20-advanced-features/output-only-01-missing-unsafe/Cargo.toml
similarity index 100%
rename from listings/ch19-advanced-features/output-only-01-missing-unsafe/Cargo.toml
rename to listings/ch20-advanced-features/output-only-01-missing-unsafe/Cargo.toml
diff --git a/listings/ch19-advanced-features/output-only-01-missing-unsafe/output.txt b/listings/ch20-advanced-features/output-only-01-missing-unsafe/output.txt
similarity index 100%
rename from listings/ch19-advanced-features/output-only-01-missing-unsafe/output.txt
rename to listings/ch20-advanced-features/output-only-01-missing-unsafe/output.txt
diff --git a/listings/ch19-advanced-features/output-only-01-missing-unsafe/src/main.rs b/listings/ch20-advanced-features/output-only-01-missing-unsafe/src/main.rs
similarity index 100%
rename from listings/ch19-advanced-features/output-only-01-missing-unsafe/src/main.rs
rename to listings/ch20-advanced-features/output-only-01-missing-unsafe/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-01/Cargo.lock b/listings/ch21-web-server/listing-21-01/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-01/Cargo.lock
rename to listings/ch21-web-server/listing-21-01/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-01/Cargo.toml b/listings/ch21-web-server/listing-21-01/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-01/Cargo.toml
rename to listings/ch21-web-server/listing-21-01/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-01/src/main.rs b/listings/ch21-web-server/listing-21-01/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-01/src/main.rs
rename to listings/ch21-web-server/listing-21-01/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-02/Cargo.lock b/listings/ch21-web-server/listing-21-02/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-02/Cargo.lock
rename to listings/ch21-web-server/listing-21-02/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-02/Cargo.toml b/listings/ch21-web-server/listing-21-02/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-02/Cargo.toml
rename to listings/ch21-web-server/listing-21-02/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-02/src/main.rs b/listings/ch21-web-server/listing-21-02/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-02/src/main.rs
rename to listings/ch21-web-server/listing-21-02/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-03/Cargo.lock b/listings/ch21-web-server/listing-21-03/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-03/Cargo.lock
rename to listings/ch21-web-server/listing-21-03/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-03/Cargo.toml b/listings/ch21-web-server/listing-21-03/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-03/Cargo.toml
rename to listings/ch21-web-server/listing-21-03/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-03/src/main.rs b/listings/ch21-web-server/listing-21-03/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-03/src/main.rs
rename to listings/ch21-web-server/listing-21-03/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-05/Cargo.lock b/listings/ch21-web-server/listing-21-05/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-05/Cargo.lock
rename to listings/ch21-web-server/listing-21-05/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-05/Cargo.toml b/listings/ch21-web-server/listing-21-05/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-05/Cargo.toml
rename to listings/ch21-web-server/listing-21-05/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-05/hello.html b/listings/ch21-web-server/listing-21-05/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-05/hello.html
rename to listings/ch21-web-server/listing-21-05/hello.html
diff --git a/listings/ch20-web-server/listing-20-05/src/main.rs b/listings/ch21-web-server/listing-21-05/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-05/src/main.rs
rename to listings/ch21-web-server/listing-21-05/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-06/Cargo.lock b/listings/ch21-web-server/listing-21-06/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-06/Cargo.lock
rename to listings/ch21-web-server/listing-21-06/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-06/Cargo.toml b/listings/ch21-web-server/listing-21-06/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-06/Cargo.toml
rename to listings/ch21-web-server/listing-21-06/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-06/hello.html b/listings/ch21-web-server/listing-21-06/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-06/hello.html
rename to listings/ch21-web-server/listing-21-06/hello.html
diff --git a/listings/ch20-web-server/listing-20-06/src/main.rs b/listings/ch21-web-server/listing-21-06/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-06/src/main.rs
rename to listings/ch21-web-server/listing-21-06/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-07/404.html b/listings/ch21-web-server/listing-21-07/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-07/404.html
rename to listings/ch21-web-server/listing-21-07/404.html
diff --git a/listings/ch20-web-server/listing-20-07/Cargo.lock b/listings/ch21-web-server/listing-21-07/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-07/Cargo.lock
rename to listings/ch21-web-server/listing-21-07/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-07/Cargo.toml b/listings/ch21-web-server/listing-21-07/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-07/Cargo.toml
rename to listings/ch21-web-server/listing-21-07/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-07/hello.html b/listings/ch21-web-server/listing-21-07/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-07/hello.html
rename to listings/ch21-web-server/listing-21-07/hello.html
diff --git a/listings/ch20-web-server/listing-20-07/src/main.rs b/listings/ch21-web-server/listing-21-07/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-07/src/main.rs
rename to listings/ch21-web-server/listing-21-07/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-09/404.html b/listings/ch21-web-server/listing-21-09/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-09/404.html
rename to listings/ch21-web-server/listing-21-09/404.html
diff --git a/listings/ch20-web-server/listing-20-09/Cargo.lock b/listings/ch21-web-server/listing-21-09/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-09/Cargo.lock
rename to listings/ch21-web-server/listing-21-09/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-09/Cargo.toml b/listings/ch21-web-server/listing-21-09/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-09/Cargo.toml
rename to listings/ch21-web-server/listing-21-09/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-09/hello.html b/listings/ch21-web-server/listing-21-09/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-09/hello.html
rename to listings/ch21-web-server/listing-21-09/hello.html
diff --git a/listings/ch20-web-server/listing-20-09/src/main.rs b/listings/ch21-web-server/listing-21-09/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-09/src/main.rs
rename to listings/ch21-web-server/listing-21-09/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-10/404.html b/listings/ch21-web-server/listing-21-10/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-10/404.html
rename to listings/ch21-web-server/listing-21-10/404.html
diff --git a/listings/ch20-web-server/listing-20-10/Cargo.lock b/listings/ch21-web-server/listing-21-10/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-10/Cargo.lock
rename to listings/ch21-web-server/listing-21-10/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-10/Cargo.toml b/listings/ch21-web-server/listing-21-10/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-10/Cargo.toml
rename to listings/ch21-web-server/listing-21-10/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-10/hello.html b/listings/ch21-web-server/listing-21-10/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-10/hello.html
rename to listings/ch21-web-server/listing-21-10/hello.html
diff --git a/listings/ch20-web-server/listing-20-10/src/main.rs b/listings/ch21-web-server/listing-21-10/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-10/src/main.rs
rename to listings/ch21-web-server/listing-21-10/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-11/404.html b/listings/ch21-web-server/listing-21-11/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-11/404.html
rename to listings/ch21-web-server/listing-21-11/404.html
diff --git a/listings/ch20-web-server/listing-20-11/Cargo.lock b/listings/ch21-web-server/listing-21-11/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-11/Cargo.lock
rename to listings/ch21-web-server/listing-21-11/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-11/Cargo.toml b/listings/ch21-web-server/listing-21-11/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-11/Cargo.toml
rename to listings/ch21-web-server/listing-21-11/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-11/hello.html b/listings/ch21-web-server/listing-21-11/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-11/hello.html
rename to listings/ch21-web-server/listing-21-11/hello.html
diff --git a/listings/ch20-web-server/listing-20-11/src/main.rs b/listings/ch21-web-server/listing-21-11/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-11/src/main.rs
rename to listings/ch21-web-server/listing-21-11/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-12/404.html b/listings/ch21-web-server/listing-21-12/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-12/404.html
rename to listings/ch21-web-server/listing-21-12/404.html
diff --git a/listings/ch20-web-server/listing-20-12/Cargo.lock b/listings/ch21-web-server/listing-21-12/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-12/Cargo.lock
rename to listings/ch21-web-server/listing-21-12/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-12/Cargo.toml b/listings/ch21-web-server/listing-21-12/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-12/Cargo.toml
rename to listings/ch21-web-server/listing-21-12/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-12/hello.html b/listings/ch21-web-server/listing-21-12/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-12/hello.html
rename to listings/ch21-web-server/listing-21-12/hello.html
diff --git a/listings/ch20-web-server/listing-20-12/output.txt b/listings/ch21-web-server/listing-21-12/output.txt
similarity index 100%
rename from listings/ch20-web-server/listing-20-12/output.txt
rename to listings/ch21-web-server/listing-21-12/output.txt
diff --git a/listings/ch20-web-server/listing-20-12/src/main.rs b/listings/ch21-web-server/listing-21-12/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-12/src/main.rs
rename to listings/ch21-web-server/listing-21-12/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-13/404.html b/listings/ch21-web-server/listing-21-13/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-13/404.html
rename to listings/ch21-web-server/listing-21-13/404.html
diff --git a/listings/ch20-web-server/listing-20-13/Cargo.lock b/listings/ch21-web-server/listing-21-13/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-13/Cargo.lock
rename to listings/ch21-web-server/listing-21-13/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-13/Cargo.toml b/listings/ch21-web-server/listing-21-13/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-13/Cargo.toml
rename to listings/ch21-web-server/listing-21-13/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-13/hello.html b/listings/ch21-web-server/listing-21-13/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-13/hello.html
rename to listings/ch21-web-server/listing-21-13/hello.html
diff --git a/listings/ch20-web-server/listing-20-13/src/lib.rs b/listings/ch21-web-server/listing-21-13/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-13/src/lib.rs
rename to listings/ch21-web-server/listing-21-13/src/lib.rs
diff --git a/listings/ch20-web-server/listing-20-13/src/main.rs b/listings/ch21-web-server/listing-21-13/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-13/src/main.rs
rename to listings/ch21-web-server/listing-21-13/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-14/404.html b/listings/ch21-web-server/listing-21-14/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-14/404.html
rename to listings/ch21-web-server/listing-21-14/404.html
diff --git a/listings/ch20-web-server/listing-20-14/Cargo.lock b/listings/ch21-web-server/listing-21-14/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-14/Cargo.lock
rename to listings/ch21-web-server/listing-21-14/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-14/Cargo.toml b/listings/ch21-web-server/listing-21-14/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-14/Cargo.toml
rename to listings/ch21-web-server/listing-21-14/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-14/hello.html b/listings/ch21-web-server/listing-21-14/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-14/hello.html
rename to listings/ch21-web-server/listing-21-14/hello.html
diff --git a/listings/ch20-web-server/listing-20-14/src/lib.rs b/listings/ch21-web-server/listing-21-14/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-14/src/lib.rs
rename to listings/ch21-web-server/listing-21-14/src/lib.rs
diff --git a/listings/ch20-web-server/listing-20-14/src/main.rs b/listings/ch21-web-server/listing-21-14/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-14/src/main.rs
rename to listings/ch21-web-server/listing-21-14/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-15/404.html b/listings/ch21-web-server/listing-21-15/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-15/404.html
rename to listings/ch21-web-server/listing-21-15/404.html
diff --git a/listings/ch20-web-server/listing-20-15/Cargo.lock b/listings/ch21-web-server/listing-21-15/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-15/Cargo.lock
rename to listings/ch21-web-server/listing-21-15/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-15/Cargo.toml b/listings/ch21-web-server/listing-21-15/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-15/Cargo.toml
rename to listings/ch21-web-server/listing-21-15/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-15/hello.html b/listings/ch21-web-server/listing-21-15/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-15/hello.html
rename to listings/ch21-web-server/listing-21-15/hello.html
diff --git a/listings/ch20-web-server/listing-20-15/src/lib.rs b/listings/ch21-web-server/listing-21-15/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-15/src/lib.rs
rename to listings/ch21-web-server/listing-21-15/src/lib.rs
diff --git a/listings/ch20-web-server/listing-20-15/src/main.rs b/listings/ch21-web-server/listing-21-15/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-15/src/main.rs
rename to listings/ch21-web-server/listing-21-15/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-16/404.html b/listings/ch21-web-server/listing-21-16/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-16/404.html
rename to listings/ch21-web-server/listing-21-16/404.html
diff --git a/listings/ch20-web-server/listing-20-16/Cargo.lock b/listings/ch21-web-server/listing-21-16/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-16/Cargo.lock
rename to listings/ch21-web-server/listing-21-16/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-16/Cargo.toml b/listings/ch21-web-server/listing-21-16/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-16/Cargo.toml
rename to listings/ch21-web-server/listing-21-16/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-16/hello.html b/listings/ch21-web-server/listing-21-16/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-16/hello.html
rename to listings/ch21-web-server/listing-21-16/hello.html
diff --git a/listings/ch20-web-server/listing-20-16/src/lib.rs b/listings/ch21-web-server/listing-21-16/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-16/src/lib.rs
rename to listings/ch21-web-server/listing-21-16/src/lib.rs
diff --git a/listings/ch20-web-server/listing-20-16/src/main.rs b/listings/ch21-web-server/listing-21-16/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-16/src/main.rs
rename to listings/ch21-web-server/listing-21-16/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-17/404.html b/listings/ch21-web-server/listing-21-17/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-17/404.html
rename to listings/ch21-web-server/listing-21-17/404.html
diff --git a/listings/ch20-web-server/listing-20-17/Cargo.lock b/listings/ch21-web-server/listing-21-17/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-17/Cargo.lock
rename to listings/ch21-web-server/listing-21-17/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-17/Cargo.toml b/listings/ch21-web-server/listing-21-17/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-17/Cargo.toml
rename to listings/ch21-web-server/listing-21-17/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-17/hello.html b/listings/ch21-web-server/listing-21-17/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-17/hello.html
rename to listings/ch21-web-server/listing-21-17/hello.html
diff --git a/listings/ch20-web-server/listing-20-17/output.txt b/listings/ch21-web-server/listing-21-17/output.txt
similarity index 100%
rename from listings/ch20-web-server/listing-20-17/output.txt
rename to listings/ch21-web-server/listing-21-17/output.txt
diff --git a/listings/ch20-web-server/listing-20-17/src/lib.rs b/listings/ch21-web-server/listing-21-17/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-17/src/lib.rs
rename to listings/ch21-web-server/listing-21-17/src/lib.rs
diff --git a/listings/ch20-web-server/listing-20-17/src/main.rs b/listings/ch21-web-server/listing-21-17/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-17/src/main.rs
rename to listings/ch21-web-server/listing-21-17/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-18/404.html b/listings/ch21-web-server/listing-21-18/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-18/404.html
rename to listings/ch21-web-server/listing-21-18/404.html
diff --git a/listings/ch20-web-server/listing-20-18/Cargo.lock b/listings/ch21-web-server/listing-21-18/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-18/Cargo.lock
rename to listings/ch21-web-server/listing-21-18/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-18/Cargo.toml b/listings/ch21-web-server/listing-21-18/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-18/Cargo.toml
rename to listings/ch21-web-server/listing-21-18/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-18/hello.html b/listings/ch21-web-server/listing-21-18/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-18/hello.html
rename to listings/ch21-web-server/listing-21-18/hello.html
diff --git a/listings/ch20-web-server/listing-20-18/src/lib.rs b/listings/ch21-web-server/listing-21-18/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-18/src/lib.rs
rename to listings/ch21-web-server/listing-21-18/src/lib.rs
diff --git a/listings/ch20-web-server/listing-20-18/src/main.rs b/listings/ch21-web-server/listing-21-18/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-18/src/main.rs
rename to listings/ch21-web-server/listing-21-18/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-19/404.html b/listings/ch21-web-server/listing-21-19/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-19/404.html
rename to listings/ch21-web-server/listing-21-19/404.html
diff --git a/listings/ch20-web-server/listing-20-19/Cargo.lock b/listings/ch21-web-server/listing-21-19/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-19/Cargo.lock
rename to listings/ch21-web-server/listing-21-19/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-19/Cargo.toml b/listings/ch21-web-server/listing-21-19/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-19/Cargo.toml
rename to listings/ch21-web-server/listing-21-19/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-19/hello.html b/listings/ch21-web-server/listing-21-19/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-19/hello.html
rename to listings/ch21-web-server/listing-21-19/hello.html
diff --git a/listings/ch20-web-server/listing-20-19/src/lib.rs b/listings/ch21-web-server/listing-21-19/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-19/src/lib.rs
rename to listings/ch21-web-server/listing-21-19/src/lib.rs
diff --git a/listings/ch20-web-server/listing-20-19/src/main.rs b/listings/ch21-web-server/listing-21-19/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-19/src/main.rs
rename to listings/ch21-web-server/listing-21-19/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-20/404.html b/listings/ch21-web-server/listing-21-20/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-20/404.html
rename to listings/ch21-web-server/listing-21-20/404.html
diff --git a/listings/ch20-web-server/listing-20-20/Cargo.lock b/listings/ch21-web-server/listing-21-20/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-20/Cargo.lock
rename to listings/ch21-web-server/listing-21-20/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-20/Cargo.toml b/listings/ch21-web-server/listing-21-20/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-20/Cargo.toml
rename to listings/ch21-web-server/listing-21-20/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-20/hello.html b/listings/ch21-web-server/listing-21-20/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-20/hello.html
rename to listings/ch21-web-server/listing-21-20/hello.html
diff --git a/listings/ch20-web-server/listing-20-20/src/lib.rs b/listings/ch21-web-server/listing-21-20/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-20/src/lib.rs
rename to listings/ch21-web-server/listing-21-20/src/lib.rs
diff --git a/listings/ch20-web-server/listing-20-20/src/main.rs b/listings/ch21-web-server/listing-21-20/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-20/src/main.rs
rename to listings/ch21-web-server/listing-21-20/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-21/404.html b/listings/ch21-web-server/listing-21-21/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-21/404.html
rename to listings/ch21-web-server/listing-21-21/404.html
diff --git a/listings/ch20-web-server/listing-20-21/Cargo.lock b/listings/ch21-web-server/listing-21-21/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-21/Cargo.lock
rename to listings/ch21-web-server/listing-21-21/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-21/Cargo.toml b/listings/ch21-web-server/listing-21-21/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-21/Cargo.toml
rename to listings/ch21-web-server/listing-21-21/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-21/hello.html b/listings/ch21-web-server/listing-21-21/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-21/hello.html
rename to listings/ch21-web-server/listing-21-21/hello.html
diff --git a/listings/ch20-web-server/listing-20-21/src/lib.rs b/listings/ch21-web-server/listing-21-21/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-21/src/lib.rs
rename to listings/ch21-web-server/listing-21-21/src/lib.rs
diff --git a/listings/ch20-web-server/listing-20-21/src/main.rs b/listings/ch21-web-server/listing-21-21/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-21/src/main.rs
rename to listings/ch21-web-server/listing-21-21/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-22/404.html b/listings/ch21-web-server/listing-21-22/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-22/404.html
rename to listings/ch21-web-server/listing-21-22/404.html
diff --git a/listings/ch20-web-server/listing-20-22/Cargo.lock b/listings/ch21-web-server/listing-21-22/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-22/Cargo.lock
rename to listings/ch21-web-server/listing-21-22/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-22/Cargo.toml b/listings/ch21-web-server/listing-21-22/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-22/Cargo.toml
rename to listings/ch21-web-server/listing-21-22/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-22/hello.html b/listings/ch21-web-server/listing-21-22/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-22/hello.html
rename to listings/ch21-web-server/listing-21-22/hello.html
diff --git a/listings/ch20-web-server/listing-20-22/output.txt b/listings/ch21-web-server/listing-21-22/output.txt
similarity index 100%
rename from listings/ch20-web-server/listing-20-22/output.txt
rename to listings/ch21-web-server/listing-21-22/output.txt
diff --git a/listings/ch20-web-server/listing-20-22/src/lib.rs b/listings/ch21-web-server/listing-21-22/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-22/src/lib.rs
rename to listings/ch21-web-server/listing-21-22/src/lib.rs
diff --git a/listings/ch20-web-server/listing-20-22/src/main.rs b/listings/ch21-web-server/listing-21-22/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-22/src/main.rs
rename to listings/ch21-web-server/listing-21-22/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-23/404.html b/listings/ch21-web-server/listing-21-23/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-23/404.html
rename to listings/ch21-web-server/listing-21-23/404.html
diff --git a/listings/ch20-web-server/listing-20-23/Cargo.lock b/listings/ch21-web-server/listing-21-23/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-23/Cargo.lock
rename to listings/ch21-web-server/listing-21-23/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-23/Cargo.toml b/listings/ch21-web-server/listing-21-23/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-23/Cargo.toml
rename to listings/ch21-web-server/listing-21-23/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-23/hello.html b/listings/ch21-web-server/listing-21-23/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-23/hello.html
rename to listings/ch21-web-server/listing-21-23/hello.html
diff --git a/listings/ch20-web-server/listing-20-23/src/lib.rs b/listings/ch21-web-server/listing-21-23/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-23/src/lib.rs
rename to listings/ch21-web-server/listing-21-23/src/lib.rs
diff --git a/listings/ch20-web-server/listing-20-23/src/main.rs b/listings/ch21-web-server/listing-21-23/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-23/src/main.rs
rename to listings/ch21-web-server/listing-21-23/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-24/404.html b/listings/ch21-web-server/listing-21-24/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-24/404.html
rename to listings/ch21-web-server/listing-21-24/404.html
diff --git a/listings/ch20-web-server/listing-20-24/Cargo.lock b/listings/ch21-web-server/listing-21-24/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-24/Cargo.lock
rename to listings/ch21-web-server/listing-21-24/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-24/Cargo.toml b/listings/ch21-web-server/listing-21-24/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-24/Cargo.toml
rename to listings/ch21-web-server/listing-21-24/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-24/hello.html b/listings/ch21-web-server/listing-21-24/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-24/hello.html
rename to listings/ch21-web-server/listing-21-24/hello.html
diff --git a/listings/ch20-web-server/listing-20-24/src/lib.rs b/listings/ch21-web-server/listing-21-24/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-24/src/lib.rs
rename to listings/ch21-web-server/listing-21-24/src/lib.rs
diff --git a/listings/ch20-web-server/listing-20-24/src/main.rs b/listings/ch21-web-server/listing-21-24/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-24/src/main.rs
rename to listings/ch21-web-server/listing-21-24/src/main.rs
diff --git a/listings/ch20-web-server/listing-20-25/404.html b/listings/ch21-web-server/listing-21-25/404.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-25/404.html
rename to listings/ch21-web-server/listing-21-25/404.html
diff --git a/listings/ch20-web-server/listing-20-25/Cargo.lock b/listings/ch21-web-server/listing-21-25/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/listing-20-25/Cargo.lock
rename to listings/ch21-web-server/listing-21-25/Cargo.lock
diff --git a/listings/ch20-web-server/listing-20-25/Cargo.toml b/listings/ch21-web-server/listing-21-25/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/listing-20-25/Cargo.toml
rename to listings/ch21-web-server/listing-21-25/Cargo.toml
diff --git a/listings/ch20-web-server/listing-20-25/hello.html b/listings/ch21-web-server/listing-21-25/hello.html
similarity index 100%
rename from listings/ch20-web-server/listing-20-25/hello.html
rename to listings/ch21-web-server/listing-21-25/hello.html
diff --git a/listings/ch20-web-server/listing-20-25/src/lib.rs b/listings/ch21-web-server/listing-21-25/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-25/src/lib.rs
rename to listings/ch21-web-server/listing-21-25/src/lib.rs
diff --git a/listings/ch20-web-server/listing-20-25/src/main.rs b/listings/ch21-web-server/listing-21-25/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/listing-20-25/src/main.rs
rename to listings/ch21-web-server/listing-21-25/src/main.rs
diff --git a/listings/ch20-web-server/no-listing-01-define-threadpool-struct/404.html b/listings/ch21-web-server/no-listing-01-define-threadpool-struct/404.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-01-define-threadpool-struct/404.html
rename to listings/ch21-web-server/no-listing-01-define-threadpool-struct/404.html
diff --git a/listings/ch20-web-server/no-listing-01-define-threadpool-struct/Cargo.lock b/listings/ch21-web-server/no-listing-01-define-threadpool-struct/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/no-listing-01-define-threadpool-struct/Cargo.lock
rename to listings/ch21-web-server/no-listing-01-define-threadpool-struct/Cargo.lock
diff --git a/listings/ch20-web-server/no-listing-01-define-threadpool-struct/Cargo.toml b/listings/ch21-web-server/no-listing-01-define-threadpool-struct/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/no-listing-01-define-threadpool-struct/Cargo.toml
rename to listings/ch21-web-server/no-listing-01-define-threadpool-struct/Cargo.toml
diff --git a/listings/ch20-web-server/no-listing-01-define-threadpool-struct/hello.html b/listings/ch21-web-server/no-listing-01-define-threadpool-struct/hello.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-01-define-threadpool-struct/hello.html
rename to listings/ch21-web-server/no-listing-01-define-threadpool-struct/hello.html
diff --git a/listings/ch20-web-server/no-listing-01-define-threadpool-struct/output.txt b/listings/ch21-web-server/no-listing-01-define-threadpool-struct/output.txt
similarity index 100%
rename from listings/ch20-web-server/no-listing-01-define-threadpool-struct/output.txt
rename to listings/ch21-web-server/no-listing-01-define-threadpool-struct/output.txt
diff --git a/listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/lib.rs b/listings/ch21-web-server/no-listing-01-define-threadpool-struct/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/lib.rs
rename to listings/ch21-web-server/no-listing-01-define-threadpool-struct/src/lib.rs
diff --git a/listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/main.rs b/listings/ch21-web-server/no-listing-01-define-threadpool-struct/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/main.rs
rename to listings/ch21-web-server/no-listing-01-define-threadpool-struct/src/main.rs
diff --git a/listings/ch20-web-server/no-listing-02-impl-threadpool-new/404.html b/listings/ch21-web-server/no-listing-02-impl-threadpool-new/404.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-02-impl-threadpool-new/404.html
rename to listings/ch21-web-server/no-listing-02-impl-threadpool-new/404.html
diff --git a/listings/ch20-web-server/no-listing-02-impl-threadpool-new/Cargo.lock b/listings/ch21-web-server/no-listing-02-impl-threadpool-new/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/no-listing-02-impl-threadpool-new/Cargo.lock
rename to listings/ch21-web-server/no-listing-02-impl-threadpool-new/Cargo.lock
diff --git a/listings/ch20-web-server/no-listing-02-impl-threadpool-new/Cargo.toml b/listings/ch21-web-server/no-listing-02-impl-threadpool-new/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/no-listing-02-impl-threadpool-new/Cargo.toml
rename to listings/ch21-web-server/no-listing-02-impl-threadpool-new/Cargo.toml
diff --git a/listings/ch20-web-server/no-listing-02-impl-threadpool-new/hello.html b/listings/ch21-web-server/no-listing-02-impl-threadpool-new/hello.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-02-impl-threadpool-new/hello.html
rename to listings/ch21-web-server/no-listing-02-impl-threadpool-new/hello.html
diff --git a/listings/ch20-web-server/no-listing-02-impl-threadpool-new/output.txt b/listings/ch21-web-server/no-listing-02-impl-threadpool-new/output.txt
similarity index 100%
rename from listings/ch20-web-server/no-listing-02-impl-threadpool-new/output.txt
rename to listings/ch21-web-server/no-listing-02-impl-threadpool-new/output.txt
diff --git a/listings/ch20-web-server/no-listing-02-impl-threadpool-new/src/lib.rs b/listings/ch21-web-server/no-listing-02-impl-threadpool-new/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-02-impl-threadpool-new/src/lib.rs
rename to listings/ch21-web-server/no-listing-02-impl-threadpool-new/src/lib.rs
diff --git a/listings/ch20-web-server/no-listing-02-impl-threadpool-new/src/main.rs b/listings/ch21-web-server/no-listing-02-impl-threadpool-new/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-02-impl-threadpool-new/src/main.rs
rename to listings/ch21-web-server/no-listing-02-impl-threadpool-new/src/main.rs
diff --git a/listings/ch20-web-server/no-listing-03-define-execute/404.html b/listings/ch21-web-server/no-listing-03-define-execute/404.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-03-define-execute/404.html
rename to listings/ch21-web-server/no-listing-03-define-execute/404.html
diff --git a/listings/ch20-web-server/no-listing-03-define-execute/Cargo.lock b/listings/ch21-web-server/no-listing-03-define-execute/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/no-listing-03-define-execute/Cargo.lock
rename to listings/ch21-web-server/no-listing-03-define-execute/Cargo.lock
diff --git a/listings/ch20-web-server/no-listing-03-define-execute/Cargo.toml b/listings/ch21-web-server/no-listing-03-define-execute/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/no-listing-03-define-execute/Cargo.toml
rename to listings/ch21-web-server/no-listing-03-define-execute/Cargo.toml
diff --git a/listings/ch20-web-server/no-listing-03-define-execute/hello.html b/listings/ch21-web-server/no-listing-03-define-execute/hello.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-03-define-execute/hello.html
rename to listings/ch21-web-server/no-listing-03-define-execute/hello.html
diff --git a/listings/ch20-web-server/no-listing-03-define-execute/output.txt b/listings/ch21-web-server/no-listing-03-define-execute/output.txt
similarity index 100%
rename from listings/ch20-web-server/no-listing-03-define-execute/output.txt
rename to listings/ch21-web-server/no-listing-03-define-execute/output.txt
diff --git a/listings/ch20-web-server/no-listing-03-define-execute/src/lib.rs b/listings/ch21-web-server/no-listing-03-define-execute/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-03-define-execute/src/lib.rs
rename to listings/ch21-web-server/no-listing-03-define-execute/src/lib.rs
diff --git a/listings/ch20-web-server/no-listing-03-define-execute/src/main.rs b/listings/ch21-web-server/no-listing-03-define-execute/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-03-define-execute/src/main.rs
rename to listings/ch21-web-server/no-listing-03-define-execute/src/main.rs
diff --git a/listings/ch20-web-server/no-listing-04-update-worker-definition/404.html b/listings/ch21-web-server/no-listing-04-update-worker-definition/404.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-04-update-worker-definition/404.html
rename to listings/ch21-web-server/no-listing-04-update-worker-definition/404.html
diff --git a/listings/ch20-web-server/no-listing-04-update-worker-definition/Cargo.lock b/listings/ch21-web-server/no-listing-04-update-worker-definition/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/no-listing-04-update-worker-definition/Cargo.lock
rename to listings/ch21-web-server/no-listing-04-update-worker-definition/Cargo.lock
diff --git a/listings/ch20-web-server/no-listing-04-update-worker-definition/Cargo.toml b/listings/ch21-web-server/no-listing-04-update-worker-definition/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/no-listing-04-update-worker-definition/Cargo.toml
rename to listings/ch21-web-server/no-listing-04-update-worker-definition/Cargo.toml
diff --git a/listings/ch20-web-server/no-listing-04-update-worker-definition/hello.html b/listings/ch21-web-server/no-listing-04-update-worker-definition/hello.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-04-update-worker-definition/hello.html
rename to listings/ch21-web-server/no-listing-04-update-worker-definition/hello.html
diff --git a/listings/ch20-web-server/no-listing-04-update-worker-definition/output.txt b/listings/ch21-web-server/no-listing-04-update-worker-definition/output.txt
similarity index 100%
rename from listings/ch20-web-server/no-listing-04-update-worker-definition/output.txt
rename to listings/ch21-web-server/no-listing-04-update-worker-definition/output.txt
diff --git a/listings/ch20-web-server/no-listing-04-update-worker-definition/src/lib.rs b/listings/ch21-web-server/no-listing-04-update-worker-definition/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-04-update-worker-definition/src/lib.rs
rename to listings/ch21-web-server/no-listing-04-update-worker-definition/src/lib.rs
diff --git a/listings/ch20-web-server/no-listing-04-update-worker-definition/src/main.rs b/listings/ch21-web-server/no-listing-04-update-worker-definition/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-04-update-worker-definition/src/main.rs
rename to listings/ch21-web-server/no-listing-04-update-worker-definition/src/main.rs
diff --git a/listings/ch20-web-server/no-listing-05-fix-worker-new/404.html b/listings/ch21-web-server/no-listing-05-fix-worker-new/404.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-05-fix-worker-new/404.html
rename to listings/ch21-web-server/no-listing-05-fix-worker-new/404.html
diff --git a/listings/ch20-web-server/no-listing-05-fix-worker-new/Cargo.lock b/listings/ch21-web-server/no-listing-05-fix-worker-new/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/no-listing-05-fix-worker-new/Cargo.lock
rename to listings/ch21-web-server/no-listing-05-fix-worker-new/Cargo.lock
diff --git a/listings/ch20-web-server/no-listing-05-fix-worker-new/Cargo.toml b/listings/ch21-web-server/no-listing-05-fix-worker-new/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/no-listing-05-fix-worker-new/Cargo.toml
rename to listings/ch21-web-server/no-listing-05-fix-worker-new/Cargo.toml
diff --git a/listings/ch20-web-server/no-listing-05-fix-worker-new/hello.html b/listings/ch21-web-server/no-listing-05-fix-worker-new/hello.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-05-fix-worker-new/hello.html
rename to listings/ch21-web-server/no-listing-05-fix-worker-new/hello.html
diff --git a/listings/ch20-web-server/no-listing-05-fix-worker-new/src/lib.rs b/listings/ch21-web-server/no-listing-05-fix-worker-new/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-05-fix-worker-new/src/lib.rs
rename to listings/ch21-web-server/no-listing-05-fix-worker-new/src/lib.rs
diff --git a/listings/ch20-web-server/no-listing-05-fix-worker-new/src/main.rs b/listings/ch21-web-server/no-listing-05-fix-worker-new/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-05-fix-worker-new/src/main.rs
rename to listings/ch21-web-server/no-listing-05-fix-worker-new/src/main.rs
diff --git a/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/404.html b/listings/ch21-web-server/no-listing-06-fix-threadpool-drop/404.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-06-fix-threadpool-drop/404.html
rename to listings/ch21-web-server/no-listing-06-fix-threadpool-drop/404.html
diff --git a/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/Cargo.lock b/listings/ch21-web-server/no-listing-06-fix-threadpool-drop/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/no-listing-06-fix-threadpool-drop/Cargo.lock
rename to listings/ch21-web-server/no-listing-06-fix-threadpool-drop/Cargo.lock
diff --git a/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/Cargo.toml b/listings/ch21-web-server/no-listing-06-fix-threadpool-drop/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/no-listing-06-fix-threadpool-drop/Cargo.toml
rename to listings/ch21-web-server/no-listing-06-fix-threadpool-drop/Cargo.toml
diff --git a/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/hello.html b/listings/ch21-web-server/no-listing-06-fix-threadpool-drop/hello.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-06-fix-threadpool-drop/hello.html
rename to listings/ch21-web-server/no-listing-06-fix-threadpool-drop/hello.html
diff --git a/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/src/lib.rs b/listings/ch21-web-server/no-listing-06-fix-threadpool-drop/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-06-fix-threadpool-drop/src/lib.rs
rename to listings/ch21-web-server/no-listing-06-fix-threadpool-drop/src/lib.rs
diff --git a/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/src/main.rs b/listings/ch21-web-server/no-listing-06-fix-threadpool-drop/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-06-fix-threadpool-drop/src/main.rs
rename to listings/ch21-web-server/no-listing-06-fix-threadpool-drop/src/main.rs
diff --git a/listings/ch20-web-server/no-listing-07-final-code/404.html b/listings/ch21-web-server/no-listing-07-final-code/404.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-07-final-code/404.html
rename to listings/ch21-web-server/no-listing-07-final-code/404.html
diff --git a/listings/ch20-web-server/no-listing-07-final-code/Cargo.lock b/listings/ch21-web-server/no-listing-07-final-code/Cargo.lock
similarity index 100%
rename from listings/ch20-web-server/no-listing-07-final-code/Cargo.lock
rename to listings/ch21-web-server/no-listing-07-final-code/Cargo.lock
diff --git a/listings/ch20-web-server/no-listing-07-final-code/Cargo.toml b/listings/ch21-web-server/no-listing-07-final-code/Cargo.toml
similarity index 100%
rename from listings/ch20-web-server/no-listing-07-final-code/Cargo.toml
rename to listings/ch21-web-server/no-listing-07-final-code/Cargo.toml
diff --git a/listings/ch20-web-server/no-listing-07-final-code/hello.html b/listings/ch21-web-server/no-listing-07-final-code/hello.html
similarity index 100%
rename from listings/ch20-web-server/no-listing-07-final-code/hello.html
rename to listings/ch21-web-server/no-listing-07-final-code/hello.html
diff --git a/listings/ch20-web-server/no-listing-07-final-code/src/lib.rs b/listings/ch21-web-server/no-listing-07-final-code/src/lib.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-07-final-code/src/lib.rs
rename to listings/ch21-web-server/no-listing-07-final-code/src/lib.rs
diff --git a/listings/ch20-web-server/no-listing-07-final-code/src/main.rs b/listings/ch21-web-server/no-listing-07-final-code/src/main.rs
similarity index 100%
rename from listings/ch20-web-server/no-listing-07-final-code/src/main.rs
rename to listings/ch21-web-server/no-listing-07-final-code/src/main.rs
diff --git a/packages/trpl/CONTRIBUTING.md b/packages/trpl/CONTRIBUTING.md
new file mode 100644
index 0000000000..bd14bf21d7
--- /dev/null
+++ b/packages/trpl/CONTRIBUTING.md
@@ -0,0 +1,11 @@
+# Contributing
+
+## 🚧 Under construction! 🚧
+
+Thanks for your interesting in helping us with this! At the moment, we are not
+ready for contributions, though.
+
+Once we stabilize the contents of the book, including the APIs we are
+re-exporting here and the little bits of functionality implemented in that
+crate, we will gladly take all the help we can get for maintaining this. We will
+update this document once we are ready for contributions.
diff --git a/packages/trpl/Cargo.toml b/packages/trpl/Cargo.toml
new file mode 100644
index 0000000000..fe35925a69
--- /dev/null
+++ b/packages/trpl/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "trpl"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+tokio = { version = "1", features = ["full"] }
diff --git a/packages/trpl/README.md b/packages/trpl/README.md
new file mode 100644
index 0000000000..3906da15a4
--- /dev/null
+++ b/packages/trpl/README.md
@@ -0,0 +1,23 @@
+# The Rust Programming Language Book Crate
+
+
+
+This repository is the home of the `trpl` crate used in _The Rust Programming
+Language_ book materials.
+
+This crate mostly just re-exports items from *other* crates. It exists for two
+main reasons:
+
+1. So that as you read along in _The Rust Programming Language_, you can add
+ just one dependency, rather than however many we end up with, and likewise
+ use only one set of imports.
+
+2. So that we can more easily guarantee it keeps building and working. Since we
+ control the contents of this crate and when it changes, readers will never be
+ broken by upstream changes, e.g. if Tokio does a breaking 2.0 release at some
+ point.
+
+## Requirements
+
+
+This crate currently requires at least Rust 1.77.
diff --git a/packages/trpl/src/lib.rs b/packages/trpl/src/lib.rs
new file mode 100644
index 0000000000..a0fddb1b09
--- /dev/null
+++ b/packages/trpl/src/lib.rs
@@ -0,0 +1,15 @@
+//! A support crate for _The Rust Programming Language_.
+//!
+//! This crate mostly just re-exports items from *other* crates. It exists for
+//! two main reasons:
+//!
+//! 1. So that as you read along in _The Rust Programming Language_, you can
+//! add just one dependency, rather than however many we end up with, and
+//! likewise use only one set of imports.
+//!
+//! 2. So that we can more easily guarantee it keeps building and working. Since
+//! we control the contents of this crate and when it changes, readers will
+//! never be broken by upstream changes, e.g. if Tokio does a breaking 2.0
+//! release at some point.
+
+pub use tokio::main as async_main;
diff --git a/packages/trpl/tests/integration/main.rs b/packages/trpl/tests/integration/main.rs
new file mode 100644
index 0000000000..fd232ccc7e
--- /dev/null
+++ b/packages/trpl/tests/integration/main.rs
@@ -0,0 +1,29 @@
+//! Integration tests for the crate.
+//!
+//! These all live in a *single* integration test crate, `tests/integration`,
+//! because each integration test is a dedicated binary crate which has to be
+//! compiled separately. While that is not really a problem for a crate this
+//! small, we have chosen to follow this “best practice” here as a good example.
+//!
+//! For more details on why you might prefer this pattern see [this post][post].
+//!
+//! [post]: https://matklad.github.io/2021/02/27/delete-cargo-integration-tests.html
+
+use trpl::async_main;
+
+/// This test makes sure the re-exported version of the `tokio::main` macro,
+/// which is applied like `#[tokio::main] async fn some_fn() { … }`, continues
+/// to work. However, tests cannot use `async fn`, so to test it, we need to
+/// have a non-`async` test function, which then applies the macro to an `async`
+/// function in its body, and invokes *that*.
+#[test]
+fn re_exported_macro_works() {
+ #[async_main]
+ async fn internal() -> &'static str {
+ let val = async { "Hello" }.await;
+ assert_eq!(val, "Hello", "Async is usable in async_main function");
+ val
+ }
+
+ assert_eq!(internal(), "Hello", "value returns correctly");
+}
diff --git a/src/SUMMARY.md b/src/SUMMARY.md
index b4b58afdee..daa9a07af7 100644
--- a/src/SUMMARY.md
+++ b/src/SUMMARY.md
@@ -101,29 +101,33 @@
- [Shared-State Concurrency](ch16-03-shared-state.md)
- [Extensible Concurrency with the `Sync` and `Send` Traits](ch16-04-extensible-concurrency-sync-and-send.md)
-- [Object Oriented Programming Features of Rust](ch17-00-oop.md)
- - [Characteristics of Object-Oriented Languages](ch17-01-what-is-oo.md)
- - [Using Trait Objects That Allow for Values of Different Types](ch17-02-trait-objects.md)
- - [Implementing an Object-Oriented Design Pattern](ch17-03-oo-design-patterns.md)
+- [Async and Await](ch17-00-async-await.md)
+ - [Futures and the Async Syntax](ch17-01-tasks.md)
+ - [something something tokio?!?](ch17-02.md)
+
+- [Object Oriented Programming Features of Rust](ch18-00-oop.md)
+ - [Characteristics of Object-Oriented Languages](ch18-01-what-is-oo.md)
+ - [Using Trait Objects That Allow for Values of Different Types](ch18-02-trait-objects.md)
+ - [Implementing an Object-Oriented Design Pattern](ch18-03-oo-design-patterns.md)
## Advanced Topics
-- [Patterns and Matching](ch18-00-patterns.md)
- - [All the Places Patterns Can Be Used](ch18-01-all-the-places-for-patterns.md)
- - [Refutability: Whether a Pattern Might Fail to Match](ch18-02-refutability.md)
- - [Pattern Syntax](ch18-03-pattern-syntax.md)
-
-- [Advanced Features](ch19-00-advanced-features.md)
- - [Unsafe Rust](ch19-01-unsafe-rust.md)
- - [Advanced Traits](ch19-03-advanced-traits.md)
- - [Advanced Types](ch19-04-advanced-types.md)
- - [Advanced Functions and Closures](ch19-05-advanced-functions-and-closures.md)
- - [Macros](ch19-06-macros.md)
-
-- [Final Project: Building a Multithreaded Web Server](ch20-00-final-project-a-web-server.md)
- - [Building a Single-Threaded Web Server](ch20-01-single-threaded.md)
- - [Turning Our Single-Threaded Server into a Multithreaded Server](ch20-02-multithreaded.md)
- - [Graceful Shutdown and Cleanup](ch20-03-graceful-shutdown-and-cleanup.md)
+- [Patterns and Matching](ch19-00-patterns.md)
+ - [All the Places Patterns Can Be Used](ch19-01-all-the-places-for-patterns.md)
+ - [Refutability: Whether a Pattern Might Fail to Match](ch19-02-refutability.md)
+ - [Pattern Syntax](ch19-03-pattern-syntax.md)
+
+- [Advanced Features](ch20-00-advanced-features.md)
+ - [Unsafe Rust](ch20-01-unsafe-rust.md)
+ - [Advanced Traits](ch20-03-advanced-traits.md)
+ - [Advanced Types](ch20-04-advanced-types.md)
+ - [Advanced Functions and Closures](ch20-05-advanced-functions-and-closures.md)
+ - [Macros](ch20-06-macros.md)
+
+- [Final Project: Building a Multithreaded Web Server](ch21-00-final-project-a-web-server.md)
+ - [Building a Single-Threaded Web Server](ch21-01-single-threaded.md)
+ - [Turning Our Single-Threaded Server into a Multithreaded Server](ch21-02-multithreaded.md)
+ - [Graceful Shutdown and Cleanup](ch21-03-graceful-shutdown-and-cleanup.md)
- [Appendix](appendix-00.md)
- [A - Keywords](appendix-01-keywords.md)
diff --git a/src/ch03-03-how-functions-work.md b/src/ch03-03-how-functions-work.md
index 2b59f0cd45..c43bb5fe58 100644
--- a/src/ch03-03-how-functions-work.md
+++ b/src/ch03-03-how-functions-work.md
@@ -53,13 +53,13 @@ In this version of `another_function` we add a parameter:
Filename: src/main.rs
```rust
-{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/src/main.rs}}
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-18-functions-with-parameters/src/main.rs}}
```
Try running this program; you should get the following output:
```console
-{{#include ../listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/output.txt}}
+{{#include ../listings/ch03-common-programming-concepts/no-listing-18-functions-with-parameters/output.txt}}
```
The declaration of `another_function` has one parameter named `x`. The type of
@@ -79,7 +79,7 @@ commas, like this:
Filename: src/main.rs
```rust
-{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/src/main.rs}}
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-19-functions-with-multiple-parameters/src/main.rs}}
```
This example creates a function named `print_labeled_measurement` with two
@@ -92,7 +92,7 @@ project’s *src/main.rs* file with the preceding example and run it using `carg
run`:
```console
-{{#include ../listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/output.txt}}
+{{#include ../listings/ch03-common-programming-concepts/no-listing-19-functions-with-multiple-parameters/output.txt}}
```
Because we called the function with `5` as the value for `value` and `'h'` as
@@ -133,13 +133,13 @@ to another variable, as the following code tries to do; you’ll get an error:
Filename: src/main.rs
```rust,ignore,does_not_compile
-{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/src/main.rs}}
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-20-statements-vs-expressions/src/main.rs}}
```
When you run this program, the error you’ll get looks like this:
```console
-{{#include ../listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/output.txt}}
+{{#include ../listings/ch03-common-programming-concepts/no-listing-20-statements-vs-expressions/output.txt}}
```
The `let y = 6` statement does not return a value, so there isn’t anything for
@@ -159,7 +159,7 @@ curly brackets is an expression, for example:
Filename: src/main.rs
```rust
-{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/src/main.rs}}
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-21-blocks-are-expressions/src/main.rs}}
```
This expression:
diff --git a/src/ch04-03-slices.md b/src/ch04-03-slices.md
index 7f8c9b7af2..da506e8a32 100644
--- a/src/ch04-03-slices.md
+++ b/src/ch04-03-slices.md
@@ -108,7 +108,7 @@ Luckily, Rust has a solution to this problem: string slices.
A *string slice* is a reference to part of a `String`, and it looks like this:
```rust
-{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-17-slice/src/main.rs:here}}
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-18-slice/src/main.rs:here}}
```
Rather than a reference to the entire `String`, `hello` is a reference to a
@@ -179,7 +179,7 @@ slice. The type that signifies “string slice” is written as `&str`:
Filename: src/main.rs
```rust
-{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-18-first-word-slice/src/main.rs:here}}
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-19-first-word-slice/src/main.rs:here}}
```
We get the index for the end of the word the same way we did in Listing 4-7, by
@@ -210,13 +210,13 @@ compile-time error:
Filename: src/main.rs
```rust,ignore,does_not_compile
-{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-19-slice-error/src/main.rs:here}}
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-20-slice-error/src/main.rs:here}}
```
Here’s the compiler error:
```console
-{{#include ../listings/ch04-understanding-ownership/no-listing-19-slice-error/output.txt}}
+{{#include ../listings/ch04-understanding-ownership/no-listing-20-slice-error/output.txt}}
```
Recall from the borrowing rules that if we have an immutable reference to
diff --git a/src/ch06-02-match.md b/src/ch06-02-match.md
index 6a510df402..d76744aaba 100644
--- a/src/ch06-02-match.md
+++ b/src/ch06-02-match.md
@@ -238,7 +238,7 @@ that by using the unit value (the empty tuple type we mentioned in [“The Tuple
Type”][tuples] section) as the code that goes with the `_` arm:
```rust
-{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/src/main.rs:here}}
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-18-underscore-unit/src/main.rs:here}}
```
Here, we’re telling Rust explicitly that we aren’t going to use any other value
diff --git a/src/ch16-01-threads.md b/src/ch16-01-threads.md
index cfdd0c7066..f3cdbff907 100644
--- a/src/ch16-01-threads.md
+++ b/src/ch16-01-threads.md
@@ -26,11 +26,12 @@ a code structure that is different from that in programs running in a single
thread.
Programming languages implement threads in a few different ways, and many
-operating systems provide an API the language can call for creating new
-threads. The Rust standard library uses a *1:1* model of thread implementation,
-whereby a program uses one operating system thread per one language thread.
-There are crates that implement other models of threading that make different
-tradeoffs to the 1:1 model.
+operating systems provide an API the language can call for creating new threads.
+The Rust standard library uses a *1:1* model of thread implementation, whereby a
+program uses one operating system thread per one language thread. There are
+crates that implement other models of threading that make different tradeoffs to
+the 1:1 model. (Rust’s async system, which we will see in the next chapter,
+provides another approach to concurrency as well.)
### Creating a New Thread with `spawn`
diff --git a/src/ch17-00-async-await.md b/src/ch17-00-async-await.md
new file mode 100644
index 0000000000..f34caf2e66
--- /dev/null
+++ b/src/ch17-00-async-await.md
@@ -0,0 +1,89 @@
+## Async and Await
+
+In Chapter 16, we saw one of Rust’s approaches to concurrency: using threads.
+Since Rust 1.39, there has been another option for concurrency: asynchronous
+programming, or *async*.
+
+In the rest of chapter, we will:
+
+* see how to use Rust’s `async` and `.await` syntax
+* explore how to use the async model to solve some of the same challenges we
+ looked at in Chapter 16
+* look at how multithreading and async provide complementary solutions, which
+ you can even use together in many cases
+
+First, though, let’s explore what async gives us.
+
+### Why Async?
+
+Many operations we ask the computer to do can take a while to finish. For
+example, if you used a video editor to create a video of a family celebration,
+exporting it could take anywhere from minutes to hours. Similarly, when you
+upload that video to some service to share it with your family, that upload
+process might take a long time. It would be nice if we could do something else
+while we are waiting for those long-running processes to complete.
+
+In the previous chapter we treated parallelism and concurrency as
+interchangeable. Now we need to distinguish between the two a little more:
+
+* *Parallelism* is when operations can happen simultaneously.
+
+* *Concurrency* is when operations can make progress without having to wait for
+ all other operations to complete.
+
+One common analogy for thinking about the difference between concurrency and
+parallelism is cooking in a kitchen. Parallelism is like having two cooks: one
+working on cooking eggs, and the other working on preparing fruit bowls. Those
+can happen at the same time, without either affecting the other. Concurrency is
+like having a single cook who can start cooking some eggs, start dicing up some
+vegetables to use in the omelette, adding seasoning and whatever vegetables are
+ready to the eggs at certain points, and switching back and forth between those
+tasks.
+
+(This analogy breaks down if you think about it too hard. The eggs keep cooking
+while the cook is chopping up the vegetables, after all. That is parallelism,
+not just concurrency! The focus of the analogy is the *cook*, not the food,
+though, and as long as you keep that in mind, it mostly works.)
+
+On a machine with multiple CPU cores, we can actually do work in parallel. One
+core can be doing one thing while another core does something completely
+unrelated, and those actually happen at the same time. On a machine with a
+single CPU core, the CPU can only do one operation at a time, but we can still
+have concurrency. Using tools like threads, processes, and async, the computer
+can pause one activity and switch to others before eventually cycling back to
+that first activity again. So all parallel operations are also concurrent, but
+not all concurrent operations happen in parallel!
+
+> Note: When working with async in Rust, we need to think in terms of
+> *concurrency*. Depending on the hardware, the operating system, and the async
+> runtime we are using, that concurrency may use some degree of parallelism
+> under the hood, or it may not. More about async runtimes in a later section!
+
+Consider again the examples of exporting a video file and waiting on the video
+file to finish uploading. The video export will use as much CPU and GPU power as
+it can. If you only had one CPU core, and your operating system never paused
+that export until it completed, you could not do anything else on your computer
+while it was running. That would be a pretty frustrating experience, though, so
+instead your computer can (and does!) invisibly interrupt the export often
+enough to let you get other small amounts of work done along the way.
+
+The file upload is different. It does not take up very much CPU time. Instead,
+you are mostly waiting on data to transfer across the network. If you only have
+a single CPU core, you might write a bunch of data to a network socket and then
+wait for it to finish getting sent by the network controller. You could choose
+to wait for all the data to get “flushed” from the socket and actually sent over
+the network, but if there is a busy network connection, you might be waiting for
+a while… with your CPU doing not much! Thus, even if you make a blocking call to
+write to a socket, your computer probably does other things while the network
+operation is happening.
+
+In both of these cases, it might be useful for *your program* to participate in
+the same kind of concurrency the computer is providing for the rest of the
+system. One way to do this is the approach we saw last chapter: using threads,
+which are provided and managed by the operating system. Another way to get
+access to concurrency is using language-specific capabilities—like async.
+
+A big difference between the cooking analogy and Rust’s async model for
+concurrency is that in the cooking example, the cook makes the decision about
+when to switch tasks. In Rust’s async model, the tasks are in control of that.
+To see how, let’s look at how Rust actually uses async.
diff --git a/src/ch17-01-tasks.md b/src/ch17-01-tasks.md
new file mode 100644
index 0000000000..be642fcec2
--- /dev/null
+++ b/src/ch17-01-tasks.md
@@ -0,0 +1,285 @@
+## Futures and the Async Syntax
+
+### Tasks
+
+As we saw in the previous chapter, threads provide one approach to concurrency,
+and they let us solve some of these issues. However, they also have some
+tradeoffs. On many operating systems, they use a fair bit of memory for each
+thread, and they come with some overhead for starting up and shutting down.
+Threads are also only an option when your operating system and hardware support
+them! While mainstream desktop and mobile operating systems have all had
+threading for many years, many embedded operating systems, like those used on
+some microcontrollers, do not.
+
+The async model provides a different—and ultimately complementary—set of
+tradeoffs. In
+
+
+
+In the async model, concurrent operations do not require their own threads.
+Instead, they can run on *tasks*. A task is a bit like a thread, but instead of
+being managed by the operating system, it is managed by a runtime.
+
+
+
+###
+
+Like many other languages with first-class support for the async programming
+model, Rust uses the `async` and `await` keywords—though with some important
+differences from other languages like C# or JavaScript. Blocks and functions can
+be marked `async`, and you can wait on the result of an `async` function or
+block to resolve using the `await` keyword.
+
+Let’s write our first async function:
+
+```rust
+fn main() {
+ hello_async();
+}
+
+async fn hello_async() {
+ println!("Hello, async!");
+}
+```
+
+If we compile and run this… nothing happens, and we get a compiler warning:
+
+```console
+$ cargo run
+warning: unused implementer of `Future` that must be used
+ --> src/main.rs:2:5
+ |
+2 | hello_async();
+ | ^^^^^^^^^^^^^
+ |
+ = note: futures do nothing unless you `.await` or poll them
+ = note: `#[warn(unused_must_use)]` on by default
+
+warning: `hello-async` (bin "hello-async") generated 1 warning
+ Finished dev [unoptimized + debuginfo] target(s) in 1.50s
+ Running `target/debug/hello-async`
+```
+
+The warning tells us why nothing happened. Calling `hello_async()` itself was
+not enough: we need to `.await`or poll the “future” it returns. That might be a
+bit surprising: we did not write a return type on the function. However, we
+*did* mark it as an `async fn`. In Rust, `async fn` is equivalent to writing a
+function which returns a *future* of the return type, using the `impl Trait`
+syntax we discussed back in the [“Traits as Parameters”][impl-trait] section in
+Chapter 10, and an `async` block compiles to an anonymous struct which
+implements the `Future` trait.
+
+So these two are roughly equivalent:
+
+```rust
+async fn hello_async() {
+ println!("Hello, async!");
+}
+```
+
+```rust
+fn hello_async() -> impl Future