Full Code of rust-lang/book for AI

main 05d114287b7d cached
2045 files
3.3 MB
978.5k tokens
1666 symbols
1 requests
Download .txt
Showing preview only (3,846K chars total). Download the full file or copy to clipboard to get everything.
Repository: rust-lang/book
Branch: main
Commit: 05d114287b7d
Files: 2045
Total size: 3.3 MB

Directory structure:
gitextract_tbjns9bv/

├── .cargo/
│   └── config.toml
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── new_translation.md
│   └── workflows/
│       └── main.yml
├── .gitignore
├── 2018-edition/
│   ├── book.toml
│   ├── dot/
│   │   ├── trpl04-01.dot
│   │   ├── trpl04-02.dot
│   │   ├── trpl04-03.dot
│   │   ├── trpl04-04.dot
│   │   ├── trpl04-05.dot
│   │   ├── trpl04-06.dot
│   │   ├── trpl15-01.dot
│   │   ├── trpl15-02.dot
│   │   └── trpl15-03.dot
│   ├── ferris.css
│   ├── ferris.js
│   └── src/
│       ├── SUMMARY.md
│       ├── appendix-00.md
│       ├── appendix-01-keywords.md
│       ├── appendix-02-operators.md
│       ├── appendix-03-derivable-traits.md
│       ├── appendix-04-useful-development-tools.md
│       ├── appendix-05-editions.md
│       ├── appendix-06-translation.md
│       ├── appendix-07-nightly-rust.md
│       ├── ch00-00-introduction.md
│       ├── ch01-00-getting-started.md
│       ├── ch01-01-installation.md
│       ├── ch01-02-hello-world.md
│       ├── ch01-03-hello-cargo.md
│       ├── ch02-00-guessing-game-tutorial.md
│       ├── ch03-00-common-programming-concepts.md
│       ├── ch03-01-variables-and-mutability.md
│       ├── ch03-02-data-types.md
│       ├── ch03-03-how-functions-work.md
│       ├── ch03-04-comments.md
│       ├── ch03-05-control-flow.md
│       ├── ch04-00-understanding-ownership.md
│       ├── ch04-01-what-is-ownership.md
│       ├── ch04-02-references-and-borrowing.md
│       ├── ch04-03-slices.md
│       ├── ch05-00-structs.md
│       ├── ch05-01-defining-structs.md
│       ├── ch05-02-example-structs.md
│       ├── ch05-03-method-syntax.md
│       ├── ch06-00-enums.md
│       ├── ch06-01-defining-an-enum.md
│       ├── ch06-02-match.md
│       ├── ch06-03-if-let.md
│       ├── ch07-00-packages-crates-and-modules.md
│       ├── ch07-01-packages-and-crates-for-making-libraries-and-executables.md
│       ├── ch07-02-modules-and-use-to-control-scope-and-privacy.md
│       ├── ch08-00-common-collections.md
│       ├── ch08-01-vectors.md
│       ├── ch08-02-strings.md
│       ├── ch08-03-hash-maps.md
│       ├── ch09-00-error-handling.md
│       ├── ch09-01-unrecoverable-errors-with-panic.md
│       ├── ch09-02-recoverable-errors-with-result.md
│       ├── ch09-03-to-panic-or-not-to-panic.md
│       ├── ch10-00-generics.md
│       ├── ch10-01-syntax.md
│       ├── ch10-02-traits.md
│       ├── ch10-03-lifetime-syntax.md
│       ├── ch11-00-testing.md
│       ├── ch11-01-writing-tests.md
│       ├── ch11-02-running-tests.md
│       ├── ch11-03-test-organization.md
│       ├── ch12-00-an-io-project.md
│       ├── ch12-01-accepting-command-line-arguments.md
│       ├── ch12-02-reading-a-file.md
│       ├── ch12-03-improving-error-handling-and-modularity.md
│       ├── ch12-04-testing-the-librarys-functionality.md
│       ├── ch12-05-working-with-environment-variables.md
│       ├── ch12-06-writing-to-stderr-instead-of-stdout.md
│       ├── ch13-00-functional-features.md
│       ├── ch13-01-closures.md
│       ├── ch13-02-iterators.md
│       ├── ch13-03-improving-our-io-project.md
│       ├── ch13-04-performance.md
│       ├── ch14-00-more-about-cargo.md
│       ├── ch14-01-release-profiles.md
│       ├── ch14-02-publishing-to-crates-io.md
│       ├── ch14-03-cargo-workspaces.md
│       ├── ch14-04-installing-binaries.md
│       ├── ch14-05-extending-cargo.md
│       ├── ch15-00-smart-pointers.md
│       ├── ch15-01-box.md
│       ├── ch15-02-deref.md
│       ├── ch15-03-drop.md
│       ├── ch15-04-rc.md
│       ├── ch15-05-interior-mutability.md
│       ├── ch15-06-reference-cycles.md
│       ├── ch16-00-concurrency.md
│       ├── ch16-01-threads.md
│       ├── ch16-02-message-passing.md
│       ├── ch16-03-shared-state.md
│       ├── ch16-04-extensible-concurrency-sync-and-send.md
│       ├── ch17-00-oop.md
│       ├── ch17-01-what-is-oo.md
│       ├── ch17-02-trait-objects.md
│       ├── ch17-03-oo-design-patterns.md
│       ├── ch18-00-patterns.md
│       ├── ch18-01-all-the-places-for-patterns.md
│       ├── ch18-02-refutability.md
│       ├── ch18-03-pattern-syntax.md
│       ├── ch19-00-advanced-features.md
│       ├── ch19-01-unsafe-rust.md
│       ├── ch19-02-advanced-lifetimes.md
│       ├── ch19-03-advanced-traits.md
│       ├── ch19-04-advanced-types.md
│       ├── ch19-05-advanced-functions-and-closures.md
│       ├── ch19-06-macros.md
│       ├── ch20-00-final-project-a-web-server.md
│       ├── ch20-01-single-threaded.md
│       ├── ch20-02-multithreaded.md
│       ├── ch20-03-graceful-shutdown-and-cleanup.md
│       └── foreword.md
├── ADMIN_TASKS.md
├── CONTRIBUTING.md
├── COPYRIGHT
├── Cargo.toml
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md
├── TODO.md
├── book.toml
├── ci/
│   ├── dictionary.txt
│   ├── spellcheck.sh
│   └── validate.sh
├── dot/
│   ├── trpl04-01.dot
│   ├── trpl04-02.dot
│   ├── trpl04-03.dot
│   ├── trpl04-04.dot
│   ├── trpl04-05.dot
│   ├── trpl04-06.dot
│   ├── trpl04-07.dot
│   ├── trpl15-01.dot
│   ├── trpl15-02.dot
│   ├── trpl15-03.dot
│   ├── trpl15-04.dot
│   ├── trpl17-01.dot
│   ├── trpl17-02.dot
│   ├── trpl17-03.dot
│   ├── trpl17-04.dot
│   ├── trpl17-05.dot
│   ├── trpl17-06.dot
│   ├── trpl17-07.dot
│   ├── trpl17-08.dot
│   └── trpl17-09.dot
├── dprint.jsonc
├── ferris.css
├── ferris.js
├── first-edition/
│   ├── book.toml
│   └── src/
│       ├── README.md
│       ├── SUMMARY.md
│       ├── associated-types.md
│       ├── attributes.md
│       ├── bibliography.md
│       ├── borrow-and-asref.md
│       ├── casting-between-types.md
│       ├── choosing-your-guarantees.md
│       ├── closures.md
│       ├── comments.md
│       ├── concurrency.md
│       ├── conditional-compilation.md
│       ├── const-and-static.md
│       ├── crates-and-modules.md
│       ├── deref-coercions.md
│       ├── documentation.md
│       ├── drop.md
│       ├── effective-rust.md
│       ├── enums.md
│       ├── error-handling.md
│       ├── ffi.md
│       ├── functions.md
│       ├── generics.md
│       ├── getting-started.md
│       ├── glossary.md
│       ├── guessing-game.md
│       ├── if-let.md
│       ├── if.md
│       ├── iterators.md
│       ├── lifetimes.md
│       ├── loops.md
│       ├── macros.md
│       ├── match.md
│       ├── method-syntax.md
│       ├── mutability.md
│       ├── operators-and-overloading.md
│       ├── ownership.md
│       ├── patterns.md
│       ├── primitive-types.md
│       ├── procedural-macros.md
│       ├── raw-pointers.md
│       ├── references-and-borrowing.md
│       ├── release-channels.md
│       ├── strings.md
│       ├── structs.md
│       ├── syntax-and-semantics.md
│       ├── syntax-index.md
│       ├── testing.md
│       ├── the-stack-and-the-heap.md
│       ├── trait-objects.md
│       ├── traits.md
│       ├── type-aliases.md
│       ├── ufcs.md
│       ├── unsafe.md
│       ├── unsized-types.md
│       ├── using-rust-without-the-standard-library.md
│       ├── variable-bindings.md
│       └── vectors.md
├── listings/
│   ├── ch02-guessing-game-tutorial/
│   │   ├── listing-02-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-02-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-02-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-02-04/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-02-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-02-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-cargo-new/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-without-expect/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-convert-string-to-number/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-looping/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── no-listing-05-quitting/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           └── main.rs
│   ├── ch03-common-programming-concepts/
│   │   ├── listing-03-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-03-02/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-03-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-03-04/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-03-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-variables-are-immutable/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-adding-mut/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-shadowing/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-shadowing-can-change-types/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-05-mut-cant-change-types/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-06-floating-point/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-07-numeric-operations/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-08-boolean/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-09-char/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-10-tuples/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-11-destructuring-tuples/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-12-tuple-indexing/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-13-arrays/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-14-array-indexing/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-15-invalid-array-access/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-16-functions/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-17-functions-with-parameters/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-18-functions-with-multiple-parameters/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-19-statements-vs-expressions/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-20-blocks-are-expressions/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-21-function-return-values/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-22-function-parameter-and-return/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-23-statements-dont-return-values/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-24-comments-end-of-line/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-25-comments-above-line/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-26-if-true/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-27-if-false/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-28-if-condition-must-be-bool/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-29-if-not-equal-0/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-30-else-if/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-31-arms-must-return-same-type/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-32-5-loop-labels/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-32-loop/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-33-return-value-from-loop/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-34-for-range/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── output-only-01-no-type-annotations/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   ├── ch04-understanding-ownership/
│   │   ├── listing-04-01/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-04/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-06/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-can-mutate-string/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-string-scope/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-string-move/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-cant-use-after-move/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04b-replacement-drop/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-05-clone/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-06-copy/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-07-reference/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-08-reference-with-annotations/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-09-fixes-listing-04-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-10-multiple-mut-not-allowed/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-11-muts-in-separate-scopes/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-12-immutable-and-mutable-not-allowed/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-13-reference-scope-ends/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-14-dangling-reference/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-15-dangling-reference-annotated/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-16-no-dangle/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-17-slice/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-18-first-word-slice/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── no-listing-19-slice-error/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   ├── ch05-using-structs-to-structure-related-data/
│   │   ├── listing-05-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-08/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-11/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-12/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-tuple-structs/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-reference-in-struct/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-associated-functions/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-unit-like-structs/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-05-dbg-macro/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-06-method-field-interaction/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── output-only-01-debug/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── output-only-02-pretty-debug/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   ├── ch06-enums-and-pattern-matching/
│   │   ├── listing-06-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-defining-enums/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-enum-with-data/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-variants-with-different-data/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-structs-similar-to-message-enum/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-05-methods-on-enums/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-06-option-examples/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-07-cant-use-option-directly/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-08-match-arm-multiple-lines/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-09-variable-in-pattern/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-10-non-exhaustive-match/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-12-if-let/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-13-count-and-announce-match/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-14-count-and-announce-if-let-else/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-15-binding-catchall/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-16-underscore-catchall/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── no-listing-17-underscore-unit/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           └── main.rs
│   ├── ch07-managing-growing-projects/
│   │   ├── listing-07-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-05/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-12/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-07-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-17/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-07-19/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-20/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-21-and-22/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── front_of_house.rs
│   │   │       └── lib.rs
│   │   ├── no-listing-01-use-std-unnested/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-extracting-hosting/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── front_of_house/
│   │   │       │   └── hosting.rs
│   │   │       ├── front_of_house.rs
│   │   │       └── lib.rs
│   │   └── quick-reference-example/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           ├── garden/
│   │           │   └── vegetables.rs
│   │           ├── garden.rs
│   │           └── main.rs
│   ├── ch08-common-collections/
│   │   ├── listing-08-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-06/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-17/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-19/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-20/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-21/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-22/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-23/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-24/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-25/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-concat-multiple-strings/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-format/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-iterate-over-hashmap/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── output-only-01-not-char-boundary/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   ├── ch09-error-handling/
│   │   ├── listing-09-01/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-04/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-10/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── guessing_game.rs
│   │   │       └── main.rs
│   │   ├── no-listing-01-panic/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-unwrap/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-05-expect/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-08-unwrap-that-cant-fail/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── no-listing-09-guess-out-of-range/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           └── main.rs
│   ├── ch10-generic-types-traits-and-lifetimes/
│   │   ├── listing-10-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-05/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-07/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-10-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-10-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-10-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-10-16/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-17/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-18/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-19/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-20/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-21/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-22/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-23/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-24/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-25/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-calling-trait-method/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── no-listing-02-calling-default-impl/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── no-listing-03-default-impl-calls-other-methods/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── no-listing-04-traits-as-parameters/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-05-returning-impl-trait/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-06-impl-trait-returns-one-type/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-07-where-clause/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-08-only-one-reference-with-lifetime/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-09-unrelated-lifetime/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-10-lifetimes-on-methods/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── no-listing-11-generics-traits-and-lifetimes/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           └── main.rs
│   ├── ch11-writing-automated-tests/
│   │   ├── listing-11-01/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-06/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-07/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-08/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-10/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-11/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-13/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── src/
│   │   │   │   └── lib.rs
│   │   │   └── tests/
│   │   │       └── integration_test.rs
│   │   ├── no-listing-01-changing-test-name/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-02-adding-another-rectangle-test/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-03-introducing-a-bug/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-04-bug-in-add-two/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-05-greeter/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-06-greeter-with-bug/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-07-custom-failure-message/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-08-guess-with-bug/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-09-guess-with-panic-msg-bug/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-10-result-in-tests/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-11-ignore-a-test/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-12-shared-test-code-problem/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── src/
│   │   │   │   └── lib.rs
│   │   │   └── tests/
│   │   │       ├── common.rs
│   │   │       └── integration_test.rs
│   │   ├── no-listing-13-fix-shared-test-code-problem/
│   │   │   ├── Cargo.toml
│   │   │   ├── src/
│   │   │   │   └── lib.rs
│   │   │   └── tests/
│   │   │       ├── common/
│   │   │       │   └── mod.rs
│   │   │       └── integration_test.rs
│   │   ├── output-only-01-show-output/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── output-only-02-single-test/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── output-only-03-multiple-tests/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── output-only-04-running-ignored/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   └── output-only-05-single-integration/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       ├── src/
│   │       │   └── lib.rs
│   │       └── tests/
│   │           └── integration_test.rs
│   ├── ch12-an-io-project/
│   │   ├── listing-12-01/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-02/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-04/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-05/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-06/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-07/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-08/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-09/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-10/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-11/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-12/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-13/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-14/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-15/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-16/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-17/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-18/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-19/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-20/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-21/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-22/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-23/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-24/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── no-listing-01-handling-errors-in-main/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-using-search-in-run/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── output-only-01-with-args/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── output-only-02-missing-lifetimes/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── output-only-03-multiple-matches/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   └── output-only-04-no-matches/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       ├── poem.txt
│   │       └── src/
│   │           ├── lib.rs
│   │           └── main.rs
│   ├── ch13-functional-features/
│   │   ├── listing-12-23-reproduced/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-24-reproduced/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-13-01/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-04/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-05/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-07/
│   │   │   ├── .rustfmt.toml
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-08/
│   │   │   ├── .rustfmt.toml
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-09/
│   │   │   ├── .rustfmt.toml
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-13-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-13-14/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-13-18/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-13-19/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-13-20/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   └── listing-13-22/
│   │       ├── Cargo.toml
│   │       ├── poem.txt
│   │       └── src/
│   │           ├── lib.rs
│   │           └── main.rs
│   ├── ch14-more-about-cargo/
│   │   ├── listing-14-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-14-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-14-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-14-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-14-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-14-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-14-07/
│   │   │   └── add/
│   │   │       ├── Cargo.toml
│   │   │       ├── add_one/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── adder/
│   │   │           ├── Cargo.toml
│   │   │           └── src/
│   │   │               └── main.rs
│   │   ├── no-listing-01-workspace/
│   │   │   └── add/
│   │   │       ├── Cargo.toml
│   │   │       └── rustfmt-ignore
│   │   ├── no-listing-02-workspace-with-two-crates/
│   │   │   └── add/
│   │   │       ├── Cargo.toml
│   │   │       ├── add_one/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── adder/
│   │   │           ├── Cargo.toml
│   │   │           └── src/
│   │   │               └── main.rs
│   │   ├── no-listing-03-workspace-with-external-dependency/
│   │   │   └── add/
│   │   │       ├── Cargo.toml
│   │   │       ├── add_one/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── adder/
│   │   │           ├── Cargo.toml
│   │   │           └── src/
│   │   │               └── main.rs
│   │   ├── no-listing-04-workspace-with-tests/
│   │   │   └── add/
│   │   │       ├── Cargo.toml
│   │   │       ├── add_one/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── adder/
│   │   │           ├── Cargo.toml
│   │   │           └── src/
│   │   │               └── main.rs
│   │   ├── output-only-01-adder-crate/
│   │   │   └── add/
│   │   │       ├── .gitignore
│   │   │       ├── Cargo.toml
│   │   │       └── rustfmt-ignore
│   │   ├── output-only-02-add-one/
│   │   │   └── add/
│   │   │       ├── Cargo.toml
│   │   │       ├── add_one/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── adder/
│   │   │           ├── Cargo.toml
│   │   │           └── src/
│   │   │               └── main.rs
│   │   └── output-only-03-use-rand/
│   │       └── add/
│   │           ├── Cargo.toml
│   │           ├── add_one/
│   │           │   ├── Cargo.toml
│   │           │   └── src/
│   │           │       └── lib.rs
│   │           └── adder/
│   │               ├── Cargo.toml
│   │               └── src/
│   │                   └── main.rs
│   ├── ch15-smart-pointers/
│   │   ├── listing-15-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-09/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-14/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-15/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-16/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-17/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-19/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-20/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-15-21/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-15-22/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-15-23/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-15-24/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-25/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-26/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-27/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-28/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-29/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-cant-borrow-immutable-as-mutable/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── output-only-01-comparing-to-reference/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   ├── ch16-fearless-concurrency/
│   │   ├── listing-16-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-09/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-13/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-14/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-join-too-early/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-no-loop-to-understand-error/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── output-only-01-move-drop/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   ├── ch17-async-await/
│   │   ├── listing-17-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-17/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-19/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-20/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-21/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-22/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-23/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-24/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-25/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-state-machine/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   └── no-listing-stream-ext/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── lib.rs
│   ├── ch18-oop/
│   │   ├── listing-18-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-10/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-18-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-17/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-19/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-20/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   └── listing-18-21/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           ├── lib.rs
│   │           └── main.rs
│   ├── ch19-patterns-and-matching/
│   │   ├── listing-19-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-02/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-05/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-08/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-10/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-17/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-19/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-20/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-21/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-22/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-23/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-24/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-25/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-26/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-27/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-28/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-29/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-literals/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-multiple-patterns/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-ranges/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-ranges-of-char/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── no-listing-05-destructuring-structs-and-tuples/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           └── main.rs
│   ├── ch20-advanced-features/
│   │   ├── listing-20-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-05/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-07/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-20-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-20-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-20-17/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-19/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-20/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-21/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-22/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-23/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-24/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-25/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-26/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-28/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-29/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-30/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-31/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-32/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-20-33/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-34/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-35/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-20-37/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-38/
│   │   │   └── hello_macro/
│   │   │       ├── Cargo.toml
│   │   │       └── src/
│   │   │           └── lib.rs
│   │   ├── listing-20-39/
│   │   │   ├── hello_macro/
│   │   │   │   ├── Cargo.toml
│   │   │   │   └── src/
│   │   │   │       └── lib.rs
│   │   │   └── pancakes/
│   │   │       ├── Cargo.toml
│   │   │       └── src/
│   │   │           └── main.rs
│   │   ├── listing-20-40/
│   │   │   └── hello_macro/
│   │   │       ├── Cargo.toml
│   │   │       ├── hello_macro_derive/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── src/
│   │   │           ├── lib.rs
│   │   │           └── main.rs
│   │   ├── listing-20-42/
│   │   │   └── hello_macro/
│   │   │       ├── Cargo.toml
│   │   │       ├── hello_macro_derive/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── src/
│   │   │           ├── lib.rs
│   │   │           └── main.rs
│   │   ├── no-listing-01-unsafe-fn/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-impl-outlineprint-for-point/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-impl-display-for-point/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-kilometers-alias/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-05-write-trait/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-06-result-alias/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-07-never-type/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-08-match-arms-different-types/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-09-unwrap-definition/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-10-loop-returns-never/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-11-cant-create-str/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-12-generic-fn-definition/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-13-generic-implicit-sized-bound/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-14-generic-maybe-sized/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-18-returns-closure/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-21-pancakes/
│   │   │   ├── hello_macro/
│   │   │   │   ├── Cargo.toml
│   │   │   │   ├── hello_macro_derive/
│   │   │   │   │   ├── Cargo.toml
│   │   │   │   │   └── src/
│   │   │   │   │       └── lib.rs
│   │   │   │   └── src/
│   │   │   │       ├── lib.rs
│   │   │   │       └── main.rs
│   │   │   └── pancakes/
│   │   │       ├── Cargo.toml
│   │   │       └── src/
│   │   │           └── main.rs
│   │   ├── no-listing-22-iterator-on-counter/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   └── output-only-01-missing-unsafe/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   └── ch21-web-server/
│       ├── listing-21-01/
│       │   ├── Cargo.toml
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-02/
│       │   ├── Cargo.toml
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-03/
│       │   ├── Cargo.toml
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-05/
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-06/
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-07/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-09/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-10/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-11/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-12/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-13/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-14/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-15/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-16/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-17/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-18/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-19/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-20/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-21/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-22/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-23/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-24/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-25/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── no-listing-01-define-threadpool-struct/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── no-listing-02-impl-threadpool-new/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── no-listing-03-define-execute/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── no-listing-04-update-drop-definition/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── no-listing-05-fix-worker-new/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── no-listing-06-fix-threadpool-drop/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       └── no-listing-07-final-code/
│           ├── 404.html
│           ├── Cargo.toml
│           ├── hello.html
│           └── src/
│               ├── lib.rs
│               └── main.rs
├── nostarch/
│   ├── appendix.md
│   ├── appendix_a.md
│   ├── appendix_b.md
│   ├── appendix_c.md
│   ├── appendix_d.md
│   ├── appendix_e.md
│   ├── bio.md
│   ├── book.toml
│   ├── chapter00.md
│   ├── chapter01.md
│   ├── chapter02.md
│   ├── chapter03.md
│   ├── chapter04.md
│   ├── chapter05.md
│   ├── chapter06.md
│   ├── chapter07.md
│   ├── chapter08.md
│   ├── chapter09.md
│   ├── chapter10.md
│   ├── chapter11.md
│   ├── chapter12.md
│   ├── chapter13.md
│   ├── chapter14.md
│   ├── chapter15.md
│   ├── chapter16.md
│   ├── chapter17.md
│   ├── chapter18.md
│   ├── chapter19.md
│   ├── chapter20.md
│   ├── chapter21.md
│   ├── docx/
│   │   ├── appendix_a.docx
│   │   ├── appendix_b.docx
│   │   ├── appendix_c.docx
│   │   ├── appendix_d.docx
│   │   ├── appendix_e.docx
│   │   ├── backports/
│   │   │   └── Index.docx
│   │   ├── chapter01.docx
│   │   ├── chapter02.docx
│   │   ├── chapter03.docx
│   │   ├── chapter04.docx
│   │   ├── chapter05.docx
│   │   ├── chapter06.docx
│   │   ├── chapter07.docx
│   │   ├── chapter08.docx
│   │   ├── chapter09.docx
│   │   ├── chapter10.docx
│   │   ├── chapter11.docx
│   │   ├── chapter12.docx
│   │   ├── chapter13.docx
│   │   ├── chapter14.docx
│   │   ├── chapter15.docx
│   │   ├── chapter16.docx
│   │   ├── chapter17.docx
│   │   ├── chapter18.docx
│   │   ├── chapter19.docx
│   │   ├── chapter20.docx
│   │   ├── chapter21.docx
│   │   └── frontmatter.docx
│   ├── foreword.md
│   ├── frontmatter.md
│   ├── introduction.md
│   └── preface.md
├── packages/
│   ├── mdbook-trpl/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   ├── src/
│   │   │   ├── bin/
│   │   │   │   ├── README - mdbook-trpl-note.md
│   │   │   │   ├── figure.rs
│   │   │   │   ├── heading.rs
│   │   │   │   ├── listing.rs
│   │   │   │   └── note.rs
│   │   │   ├── config/
│   │   │   │   ├── mod.rs
│   │   │   │   └── tests.rs
│   │   │   ├── figure/
│   │   │   │   ├── mod.rs
│   │   │   │   └── tests.rs
│   │   │   ├── heading/
│   │   │   │   ├── mod.rs
│   │   │   │   └── tests.rs
│   │   │   ├── lib.rs
│   │   │   ├── listing/
│   │   │   │   ├── mod.rs
│   │   │   │   └── tests.rs
│   │   │   └── note/
│   │   │       ├── mod.rs
│   │   │       └── tests.rs
│   │   └── tests/
│   │       └── integration/
│   │           └── main.rs
│   ├── tools/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── bin/
│   │           ├── cleanup_blockquotes.rs
│   │           ├── concat_chapters.rs
│   │           ├── convert_quotes.rs
│   │           ├── lfp.rs
│   │           ├── link2print.rs
│   │           ├── release_listings.rs
│   │           ├── remove_hidden_lines.rs
│   │           ├── remove_links.rs
│   │           └── remove_markup.rs
│   └── trpl/
│       ├── CHANGELOG.md
│       ├── CONTRIBUTING.md
│       ├── Cargo.toml
│       ├── LICENSE-APACHE
│       ├── LICENSE-MIT
│       ├── README.md
│       ├── src/
│       │   └── lib.rs
│       └── tests/
│           └── integration/
│               ├── main.rs
│               └── to-read.txt
├── redirects/
│   ├── README.md
│   ├── SUMMARY.md
│   ├── associated-types.md
│   ├── attributes.md
│   ├── bibliography.md
│   ├── borrow-and-asref.md
│   ├── casting-between-types.md
│   ├── choosing-your-guarantees.md
│   ├── closures.md
│   ├── comments.md
│   ├── compiler-plugins.md
│   ├── concurrency.md
│   ├── conditional-compilation.md
│   ├── const-and-static.md
│   ├── crates-and-modules.md
│   ├── deref-coercions.md
│   ├── documentation.md
│   ├── drop.md
│   ├── effective-rust.md
│   ├── enums.md
│   ├── error-handling.md
│   ├── ffi.md
│   ├── functions.md
│   ├── generics.md
│   ├── getting-started.md
│   ├── glossary.md
│   ├── guessing-game.md
│   ├── if-let.md
│   ├── if.md
│   ├── iterators.md
│   ├── lifetimes.md
│   ├── loops.md
│   ├── macros.md
│   ├── match.md
│   ├── method-syntax.md
│   ├── mutability.md
│   ├── operators-and-overloading.md
│   ├── ownership.md
│   ├── patterns.md
│   ├── primitive-types.md
│   ├── procedural-macros.md
│   ├── raw-pointers.md
│   ├── references-and-borrowing.md
│   ├── release-channels.md
│   ├── strings.md
│   ├── structs.md
│   ├── syntax-and-semantics.md
│   ├── syntax-index.md
│   ├── testing.md
│   ├── the-stack-and-the-heap.md
│   ├── trait-objects.md
│   ├── traits.md
│   ├── type-aliases.md
│   ├── ufcs.md
│   ├── unsafe.md
│   ├── unsized-types.md
│   ├── using-rust-without-the-standard-library.md
│   ├── variable-bindings.md
│   └── vectors.md
├── rust-toolchain
├── rustfmt.toml
├── second-edition/
│   ├── book.toml
│   ├── dot/
│   │   ├── trpl04-01.dot
│   │   ├── trpl04-02.dot
│   │   ├── trpl04-03.dot
│   │   ├── trpl04-04.dot
│   │   ├── trpl04-05.dot
│   │   ├── trpl04-06.dot
│   │   ├── trpl15-01.dot
│   │   ├── trpl15-02.dot
│   │   └── trpl15-03.dot
│   └── src/
│       ├── SUMMARY.md
│       ├── appendix-00.md
│       ├── appendix-01-keywords.md
│       ├── appendix-02-operators.md
│       ├── appendix-03-derivable-traits.md
│       ├── appendix-04-macros.md
│       ├── appendix-05-translation.md
│       ├── appendix-06-newest-features.md
│       ├── appendix-07-nightly-rust.md
│       ├── ch00-00-introduction.md
│       ├── ch01-00-getting-started.md
│       ├── ch01-01-installation.md
│       ├── ch01-02-hello-world.md
│       ├── ch01-03-hello-cargo.md
│       ├── ch02-00-guessing-game-tutorial.md
│       ├── ch03-00-common-programming-concepts.md
│       ├── ch03-01-variables-and-mutability.md
│       ├── ch03-02-data-types.md
│       ├── ch03-03-how-functions-work.md
│       ├── ch03-04-comments.md
│       ├── ch03-05-control-flow.md
│       ├── ch04-00-understanding-ownership.md
│       ├── ch04-01-what-is-ownership.md
│       ├── ch04-02-references-and-borrowing.md
│       ├── ch04-03-slices.md
│       ├── ch05-00-structs.md
│       ├── ch05-01-defining-structs.md
│       ├── ch05-02-example-structs.md
│       ├── ch05-03-method-syntax.md
│       ├── ch06-00-enums.md
│       ├── ch06-01-defining-an-enum.md
│       ├── ch06-02-match.md
│       ├── ch06-03-if-let.md
│       ├── ch07-00-modules.md
│       ├── ch07-01-mod-and-the-filesystem.md
│       ├── ch07-02-controlling-visibility-with-pub.md
│       ├── ch07-03-importing-names-with-use.md
│       ├── ch08-00-common-collections.md
│       ├── ch08-01-vectors.md
│       ├── ch08-02-strings.md
│       ├── ch08-03-hash-maps.md
│       ├── ch09-00-error-handling.md
│       ├── ch09-01-unrecoverable-errors-with-panic.md
│       ├── ch09-02-recoverable-errors-with-result.md
│       ├── ch09-03-to-panic-or-not-to-panic.md
│       ├── ch10-00-generics.md
│       ├── ch10-01-syntax.md
│       ├── ch10-02-traits.md
│       ├── ch10-03-lifetime-syntax.md
│       ├── ch11-00-testing.md
│       ├── ch11-01-writing-tests.md
│       ├── ch11-02-running-tests.md
│       ├── ch11-03-test-organization.md
│       ├── ch12-00-an-io-project.md
│       ├── ch12-01-accepting-command-line-arguments.md
│       ├── ch12-02-reading-a-file.md
│       ├── ch12-03-improving-error-handling-and-modularity.md
│       ├── ch12-04-testing-the-librarys-functionality.md
│       ├── ch12-05-working-with-environment-variables.md
│       ├── ch12-06-writing-to-stderr-instead-of-stdout.md
│       ├── ch13-00-functional-features.md
│       ├── ch13-01-closures.md
│       ├── ch13-02-iterators.md
│       ├── ch13-03-improving-our-io-project.md
│       ├── ch13-04-performance.md
│       ├── ch14-00-more-about-cargo.md
│       ├── ch14-01-release-profiles.md
│       ├── ch14-02-publishing-to-crates-io.md
│       ├── ch14-03-cargo-workspaces.md
│       ├── ch14-04-installing-binaries.md
│       ├── ch14-05-extending-cargo.md
│       ├── ch15-00-smart-pointers.md
│       ├── ch15-01-box.md
│       ├── ch15-02-deref.md
│       ├── ch15-03-drop.md
│       ├── ch15-04-rc.md
│       ├── ch15-05-interior-mutability.md
│       ├── ch15-06-reference-cycles.md
│       ├── ch16-00-concurrency.md
│       ├── ch16-01-threads.md
│       ├── ch16-02-message-passing.md
│       ├── ch16-03-shared-state.md
│       ├── ch16-04-extensible-concurrency-sync-and-send.md
│       ├── ch17-00-oop.md
│       ├── ch17-01-what-is-oo.md
│       ├── ch17-02-trait-objects.md
│       ├── ch17-03-oo-design-patterns.md
│       ├── ch18-00-patterns.md
│       ├── ch18-01-all-the-places-for-patterns.md
│       ├── ch18-02-refutability.md
│       ├── ch18-03-pattern-syntax.md
│       ├── ch19-00-advanced-features.md
│       ├── ch19-01-unsafe-rust.md
│       ├── ch19-02-advanced-lifetimes.md
│       ├── ch19-03-advanced-traits.md
│       ├── ch19-04-advanced-types.md
│       ├── ch19-05-advanced-functions-and-closures.md
│       ├── ch20-00-final-project-a-web-server.md
│       ├── ch20-01-single-threaded.md
│       ├── ch20-02-multithreaded.md
│       ├── ch20-03-graceful-shutdown-and-cleanup.md
│       └── foreword.md
├── src/
│   ├── SUMMARY.md
│   ├── appendix-00.md
│   ├── appendix-01-keywords.md
│   ├── appendix-02-operators.md
│   ├── appendix-03-derivable-traits.md
│   ├── appendix-04-useful-development-tools.md
│   ├── appendix-05-editions.md
│   ├── appendix-06-translation.md
│   ├── appendix-07-nightly-rust.md
│   ├── ch00-00-introduction.md
│   ├── ch01-00-getting-started.md
│   ├── ch01-01-installation.md
│   ├── ch01-02-hello-world.md
│   ├── ch01-03-hello-cargo.md
│   ├── ch02-00-guessing-game-tutorial.md
│   ├── ch03-00-common-programming-concepts.md
│   ├── ch03-01-variables-and-mutability.md
│   ├── ch03-02-data-types.md
│   ├── ch03-03-how-functions-work.md
│   ├── ch03-04-comments.md
│   ├── ch03-05-control-flow.md
│   ├── ch04-00-understanding-ownership.md
│   ├── ch04-01-what-is-ownership.md
│   ├── ch04-02-references-and-borrowing.md
│   ├── ch04-03-slices.md
│   ├── ch05-00-structs.md
│   ├── ch05-01-defining-structs.md
│   ├── ch05-02-example-structs.md
│   ├── ch05-03-method-syntax.md
│   ├── ch06-00-enums.md
│   ├── ch06-01-defining-an-enum.md
│   ├── ch06-02-match.md
│   ├── ch06-03-if-let.md
│   ├── ch07-00-managing-growing-projects-with-packages-crates-and-modules.md
│   ├── ch07-01-packages-and-crates.md
│   ├── ch07-02-defining-modules-to-control-scope-and-privacy.md
│   ├── ch07-03-paths-for-referring-to-an-item-in-the-module-tree.md
│   ├── ch07-04-bringing-paths-into-scope-with-the-use-keyword.md
│   ├── ch07-05-separating-modules-into-different-files.md
│   ├── ch08-00-common-collections.md
│   ├── ch08-01-vectors.md
│   ├── ch08-02-strings.md
│   ├── ch08-03-hash-maps.md
│   ├── ch09-00-error-handling.md
│   ├── ch09-01-unrecoverable-errors-with-panic.md
│   ├── ch09-02-recoverable-errors-with-result.md
│   ├── ch09-03-to-panic-or-not-to-panic.md
│   ├── ch10-00-generics.md
│   ├── ch10-01-syntax.md
│   ├── ch10-02-traits.md
│   ├── ch10-03-lifetime-syntax.md
│   ├── ch11-00-testing.md
│   ├── ch11-01-writing-tests.md
│   ├── ch11-02-running-tests.md
│   ├── ch11-03-test-organization.md
│   ├── ch12-00-an-io-project.md
│   ├── ch12-01-accepting-command-line-arguments.md
│   ├── ch12-02-reading-a-file.md
│   ├── ch12-03-improving-error-handling-and-modularity.md
│   ├── ch12-04-testing-the-librarys-functionality.md
│   ├── ch12-05-working-with-environment-variables.md
│   ├── ch12-06-writing-to-stderr-instead-of-stdout.md
│   ├── ch13-00-functional-features.md
│   ├── ch13-01-closures.md
│   ├── ch13-02-iterators.md
│   ├── ch13-03-improving-our-io-project.md
│   ├── ch13-04-performance.md
│   ├── ch14-00-more-about-cargo.md
│   ├── ch14-01-release-profiles.md
│   ├── ch14-02-publishing-to-crates-io.md
│   ├── ch14-03-cargo-workspaces.md
│   ├── ch14-04-installing-binaries.md
│   ├── ch14-05-extending-cargo.md
│   ├── ch15-00-smart-pointers.md
│   ├── ch15-01-box.md
│   ├── ch15-02-deref.md
│   ├── ch15-03-drop.md
│   ├── ch15-04-rc.md
│   ├── ch15-05-interior-mutability.md
│   ├── ch15-06-reference-cycles.md
│   ├── ch16-00-concurrency.md
│   ├── ch16-01-threads.md
│   ├── ch16-02-message-passing.md
│   ├── ch16-03-shared-state.md
│   ├── ch16-04-extensible-concurrency-sync-and-send.md
│   ├── ch17-00-async-await.md
│   ├── ch17-01-futures-and-syntax.md
│   ├── ch17-02-concurrency-with-async.md
│   ├── ch17-03-more-futures.md
│   ├── ch17-04-streams.md
│   ├── ch17-05-traits-for-async.md
│   ├── ch17-06-futures-tasks-threads.md
│   ├── ch18-00-oop.md
│   ├── ch18-01-what-is-oo.md
│   ├── ch18-02-trait-objects.md
│   ├── ch18-03-oo-design-patterns.md
│   ├── ch19-00-patterns.md
│   ├── ch19-01-all-the-places-for-patterns.md
│   ├── ch19-02-refutability.md
│   ├── ch19-03-pattern-syntax.md
│   ├── ch20-00-advanced-features.md
│   ├── ch20-01-unsafe-rust.md
│   ├── ch20-02-advanced-traits.md
│   ├── ch20-03-advanced-types.md
│   ├── ch20-04-advanced-functions-and-closures.md
│   ├── ch20-05-macros.md
│   ├── ch21-00-final-project-a-web-server.md
│   ├── ch21-01-single-threaded.md
│   ├── ch21-02-multithreaded.md
│   ├── ch21-03-graceful-shutdown-and-cleanup.md
│   ├── foreword.md
│   └── title-page.md
├── style-guide.md
├── theme/
│   ├── 2018-edition.css
│   ├── listing.css
│   └── semantic-notes.css
└── tools/
    ├── convert-quotes.sh
    ├── doc-to-md.sh
    ├── docx-to-md.xsl
    ├── generate-preview.sh
    ├── megadiff.sh
    ├── nostarch.sh
    ├── preview-robots.txt
    ├── update-editions.sh
    └── update-rustc.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .cargo/config.toml
================================================
[cargo-new]
name = "Your Name"
email = "you@example.com"


================================================
FILE: .git-blame-ignore-revs
================================================
# Ran dprint fmt on the repo
3a30e4c1fbe641afc066b3af9eb01dcdf5ed8b24


================================================
FILE: .gitattributes
================================================
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto eol=lf
*.docx binary
*.odt binary
*.png binary



================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
---

- I have searched open and closed issues and pull requests for duplicates, using these search terms:
  -
  -
  -
- I have checked the latest `main` branch to see if this has already been fixed, in this file:
  -

URL to the section(s) of the book with this problem:

Description of the problem:

Suggested fix:


================================================
FILE: .github/ISSUE_TEMPLATE/new_translation.md
================================================
---
name: New translation
about: Let us know of a new language translation you're working on
---

Language your translation is for:
URL to the repo where you're working:


================================================
FILE: .github/workflows/main.yml
================================================
name: CI
on: [push, pull_request]

env:
  MDBOOK_VERSION: 0.5.1

jobs:
  test:
    name: Run tests
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: Update rustup
      run: rustup self update
    - name: Install Rust
      run: |
        rustup set profile minimal
        rustup toolchain install 1.90 -c rust-docs
        rustup default 1.90
    - name: Install mdbook
      run: |
        mkdir bin
        curl -sSL https://github.com/rust-lang/mdBook/releases/download/v${MDBOOK_VERSION}/mdbook-v${MDBOOK_VERSION}-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=bin
        echo "$(pwd)/bin" >> "${GITHUB_PATH}"
    - name: Report versions
      run: |
        rustup --version
        rustc -Vv
        mdbook --version

    # mdBook does not currently have particularly good support for “external”
    # crates. To make the test suite work correctly with `trpl`, we must first
    # build `trpl` itself (`mdbook` will not do it), and then explicitly pass
    # its `deps` path as a library search path for `mdbook test`. That will make
    # sure all the crates can be resolved when running the tests.
    - name: Build `trpl` crate
      run: |
        cd packages/trpl
        cargo build
    - name: Run tests
      run:
        mdbook test --library-path packages/trpl/target/debug/deps
  package_tests:
    name: Run package tests
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: Update rustup
      run: rustup self update
    - name: Install Rust
      run: |
        rustup set profile minimal
        rustup toolchain install 1.90 -c rust-docs
        rustup default 1.90
    - name: Run `tools` package tests
      run: |
        cargo test
    - name: Run `mdbook-trpl` package tests
      working-directory: packages/mdbook-trpl
      run: |
        cargo test
  lint:
    name: Run lints
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: Update rustup
      run: rustup self update
    - name: Install Rust
      run: |
        rustup set profile minimal
        rustup toolchain install nightly -c rust-docs
        rustup override set nightly
    - name: Install mdbook
      run: |
        mkdir bin
        curl -sSL https://github.com/rust-lang/mdBook/releases/download/v${MDBOOK_VERSION}/mdbook-v${MDBOOK_VERSION}-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=bin
        echo "$(pwd)/bin" >> "${GITHUB_PATH}"
    - name: Install aspell
      run: sudo apt-get install aspell
    - name: Install shellcheck
      run: sudo apt-get install shellcheck
    - name: Report versions
      run: |
        rustup --version
        rustc -Vv
        mdbook --version
        aspell --version
        shellcheck --version
    - name: Shellcheck
      run: find . -name '*.sh' -print0 | xargs -0 shellcheck
    - name: Spellcheck
      run: bash ci/spellcheck.sh list
    - name: Lint for local file paths
      run: |
        mdbook build
        cargo run --bin lfp src
    - name: Validate references
      run: bash ci/validate.sh
    - name: Check for broken links
      run: |
        curl -sSLo linkcheck.sh \
          https://raw.githubusercontent.com/rust-lang/rust/HEAD/src/tools/linkchecker/linkcheck.sh
        # Cannot use --all here because of the generated redirect pages aren't available.
        sh linkcheck.sh book


================================================
FILE: .gitignore
================================================
book/
*~
.idea
.DS_Store
target
tmp

.nova
.vscode
.zed


================================================
FILE: 2018-edition/book.toml
================================================
[book]
title = "The Rust Programming Language"
authors = ["Steve Klabnik", "Carol Nichols", "Contributions from the Rust Community"]

[output.html]
additional-css = ["ferris.css"]
additional-js = ["ferris.js"]


================================================
FILE: 2018-edition/dot/trpl04-01.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];
    table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
    </TABLE>>];

    edge[tailclip="false"];
    table0:pointer:c -> table1:pointee;
}



================================================
FILE: 2018-edition/dot/trpl04-02.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];
    table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];

    table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
    </TABLE>>];

    edge[tailclip="false"];
    table0:pointer:c -> table1:pointee;
    table3:pointer:c -> table1:pointee;
}



================================================
FILE: 2018-edition/dot/trpl04-03.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];
    table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
    </TABLE>>];

    table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];
    table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
    </TABLE>>];


    edge[tailclip="false"];
    table0:pointer:c -> table1:pointee;
    table3:pointer:c -> table4:pointee;
}



================================================
FILE: 2018-edition/dot/trpl04-04.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="gray">
        <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];
    table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];

    table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
    </TABLE>>];

    edge[tailclip="false"];
    table0:pointer:c -> table1:pointee;
    table3:pointer:c -> table1:pointee;
}



================================================
FILE: 2018-edition/dot/trpl04-05.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="borrower"></TD></TR>
    </TABLE>>];
    table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD PORT="borrowee">ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];
    table2[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
    </TABLE>>];

    edge[tailclip="false"];
    table1:pointer:c -> table2:pointee;
    table0:borrower:c -> table1:borrowee;
}



================================================
FILE: 2018-edition/dot/trpl04-06.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">world</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer2"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
    </TABLE>>];

    table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>11</TD></TR>
        <TR><TD>capacity</TD><TD>11</TD></TR>
    </TABLE>>];
    table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
        <TR><TD>5</TD><TD> </TD></TR>
        <TR><TD PORT="pointee2">6</TD><TD>w</TD></TR>
        <TR><TD>7</TD><TD>o</TD></TR>
        <TR><TD>8</TD><TD>r</TD></TR>
        <TR><TD>9</TD><TD>l</TD></TR>
        <TR><TD>10</TD><TD>d</TD></TR>
    </TABLE>>];


    edge[tailclip="false"];
    table0:pointer2:c -> table4:pointee2;
    table3:pointer:c -> table4:pointee;
}



================================================
FILE: 2018-edition/dot/trpl15-01.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
        <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
        <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
        <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
        <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
        <TR><TD>i32</TD><TD>∞</TD></TR>
    </TABLE></TD></TR>
    </TABLE></TD></TR>
    </TABLE></TD></TR>
    </TABLE></TD></TR>
    </TABLE>>];
}



================================================
FILE: 2018-edition/dot/trpl15-02.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<
    <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
        <TR><TD>i32</TD><TD>
            <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
                <TR><TD SIDES="B">Box</TD></TR>
                <TR><TD>usize</TD></TR>
            </TABLE>
        </TD></TR>
    </TABLE>>];
}



================================================
FILE: 2018-edition/dot/trpl15-03.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD SIDES="B">b</TD><TD SIDES="B" PORT="ptr4"></TD></TR>
    </TABLE>>];

    table5[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD PORT="pte4">3</TD><TD PORT="ptr5">  </TD></TR>
    </TABLE>>];


    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD SIDES="B">a</TD><TD SIDES="B" PORT="ptr0"></TD></TR>
    </TABLE>>];

    table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD PORT="pte0">5</TD><TD PORT="ptr1">  </TD></TR>
    </TABLE>>];

    table2[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD PORT="pte1">10</TD><TD PORT="ptr2">  </TD></TR>
    </TABLE>>];

    table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD PORT="pte2">Nil</TD></TR>
    </TABLE>>];


    table6[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD SIDES="B">c</TD><TD SIDES="B" PORT="ptr6"></TD></TR>
    </TABLE>>];

    table7[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD PORT="pte6">4</TD><TD PORT="ptr7">  </TD></TR>
    </TABLE>>];


    edge[tailclip="false"];
    table0:ptr0:c -> table1:pte0;
    table1:ptr1:c -> table2:pte1;
    table2:ptr2:c -> table3:pte2;
    table4:ptr4:c -> table5:pte4;
    table5:ptr5:c -> table1:pte0;
    table6:ptr6:c -> table7:pte6;
    table7:ptr7:c -> table1:pte0;
}



================================================
FILE: 2018-edition/ferris.css
================================================
body.light .does_not_compile,
body.light .panics,
body.light .not_desired_behavior,
body.rust .does_not_compile,
body.rust .panics,
body.rust .not_desired_behavior {
  background: #fff1f1;
}

body.coal .does_not_compile,
body.coal .panics,
body.coal .not_desired_behavior,
body.navy .does_not_compile,
body.navy .panics,
body.navy .not_desired_behavior,
body.ayu .does_not_compile,
body.ayu .panics,
body.ayu .not_desired_behavior {
  background: #501f21;
}

.ferris {
  position: absolute;
  z-index: 99;
  right: 5px;
  top: 30px;
	width: 10%;
	height: auto;
}

.ferris-explain {
  width: 100px;
}


================================================
FILE: 2018-edition/ferris.js
================================================
var ferrisTypes = [
  {
    attr: 'does_not_compile',
    title: 'This code does not compile!'
  },
  {
    attr: 'panics',
    title: 'This code panics!'
  },
  {
    attr: 'unsafe',
    title: 'This code block contains unsafe code.'
  },
  {
    attr: 'not_desired_behavior',
    title: 'This code does not produce the desired behavior.'
  }
]

document.addEventListener('DOMContentLoaded', () => {
  for (var ferrisType of ferrisTypes) {
    attachFerrises(ferrisType)
  }
})

function attachFerrises (type) {
  var elements = document.getElementsByClassName(type.attr)

  for (var codeBlock of elements) {
    var lines = codeBlock.textContent.split(/\r|\r\n|\n/).length - 1;

    if (lines >= 4) {
      attachFerris(codeBlock, type)
    }
  }
}

function attachFerris (element, type) {
  var a = document.createElement('a')
  a.setAttribute('href', 'ch00-00-introduction.html#ferris')
  a.setAttribute('target', '_blank')

  var img = document.createElement('img')
  img.setAttribute('src', 'img/ferris/' + type.attr + '.svg')
  img.setAttribute('title', type.title)
  img.className = 'ferris'

  a.appendChild(img)

  element.parentElement.insertBefore(a, element)
}


================================================
FILE: 2018-edition/src/SUMMARY.md
================================================
# The Rust Programming Language

[Foreword](foreword.md)
[Introduction](ch00-00-introduction.md)

## Getting started

- [Getting Started](ch01-00-getting-started.md)
    - [Installation](ch01-01-installation.md)
    - [Hello, World!](ch01-02-hello-world.md)
    - [Hello, Cargo!](ch01-03-hello-cargo.md)

- [Programming a Guessing Game](ch02-00-guessing-game-tutorial.md)

- [Common Programming Concepts](ch03-00-common-programming-concepts.md)
    - [Variables and Mutability](ch03-01-variables-and-mutability.md)
    - [Data Types](ch03-02-data-types.md)
    - [How Functions Work](ch03-03-how-functions-work.md)
    - [Comments](ch03-04-comments.md)
    - [Control Flow](ch03-05-control-flow.md)

- [Understanding Ownership](ch04-00-understanding-ownership.md)
    - [What is Ownership?](ch04-01-what-is-ownership.md)
    - [References & Borrowing](ch04-02-references-and-borrowing.md)
    - [Slices](ch04-03-slices.md)

- [Using Structs to Structure Related Data](ch05-00-structs.md)
    - [Defining and Instantiating Structs](ch05-01-defining-structs.md)
    - [An Example Program Using Structs](ch05-02-example-structs.md)
    - [Method Syntax](ch05-03-method-syntax.md)

- [Enums and Pattern Matching](ch06-00-enums.md)
    - [Defining an Enum](ch06-01-defining-an-enum.md)
    - [The `match` Control Flow Operator](ch06-02-match.md)
    - [Concise Control Flow with `if let`](ch06-03-if-let.md)

## Basic Rust Literacy

- [Packages, Crates, and Modules](ch07-00-packages-crates-and-modules.md)
    - [Packages and crates for making libraries and executables](ch07-01-packages-and-crates-for-making-libraries-and-executables.md)
    - [Modules and `use` to control scope and privacy](ch07-02-modules-and-use-to-control-scope-and-privacy.md)

- [Common Collections](ch08-00-common-collections.md)
    - [Vectors](ch08-01-vectors.md)
    - [Strings](ch08-02-strings.md)
    - [Hash Maps](ch08-03-hash-maps.md)

- [Error Handling](ch09-00-error-handling.md)
    - [Unrecoverable Errors with `panic!`](ch09-01-unrecoverable-errors-with-panic.md)
    - [Recoverable Errors with `Result`](ch09-02-recoverable-errors-with-result.md)
    - [To `panic!` or Not to `panic!`](ch09-03-to-panic-or-not-to-panic.md)

- [Generic Types, Traits, and Lifetimes](ch10-00-generics.md)
    - [Generic Data Types](ch10-01-syntax.md)
    - [Traits: Defining Shared Behavior](ch10-02-traits.md)
    - [Validating References with Lifetimes](ch10-03-lifetime-syntax.md)

- [Testing](ch11-00-testing.md)
    - [Writing tests](ch11-01-writing-tests.md)
    - [Running tests](ch11-02-running-tests.md)
    - [Test Organization](ch11-03-test-organization.md)

- [An I/O Project: Building a Command Line Program](ch12-00-an-io-project.md)
    - [Accepting Command Line Arguments](ch12-01-accepting-command-line-arguments.md)
    - [Reading a File](ch12-02-reading-a-file.md)
    - [Refactoring to Improve Modularity and Error Handling](ch12-03-improving-error-handling-and-modularity.md)
    - [Developing the Library’s Functionality with Test Driven Development](ch12-04-testing-the-librarys-functionality.md)
    - [Working with Environment Variables](ch12-05-working-with-environment-variables.md)
    - [Writing Error Messages to Standard Error Instead of Standard Output](ch12-06-writing-to-stderr-instead-of-stdout.md)

## Thinking in Rust

- [Functional Language Features: Iterators and Closures](ch13-00-functional-features.md)
    - [Closures: Anonymous Functions that Can Capture Their Environment](ch13-01-closures.md)
    - [Processing a Series of Items with Iterators](ch13-02-iterators.md)
    - [Improving Our I/O Project](ch13-03-improving-our-io-project.md)
    - [Comparing Performance: Loops vs. Iterators](ch13-04-performance.md)

- [More about Cargo and Crates.io](ch14-00-more-about-cargo.md)
    - [Customizing Builds with Release Profiles](ch14-01-release-profiles.md)
    - [Publishing a Crate to Crates.io](ch14-02-publishing-to-crates-io.md)
    - [Cargo Workspaces](ch14-03-cargo-workspaces.md)
    - [Installing Binaries from Crates.io with `cargo install`](ch14-04-installing-binaries.md)
    - [Extending Cargo with Custom Commands](ch14-05-extending-cargo.md)

- [Smart Pointers](ch15-00-smart-pointers.md)
    - [`Box<T>` Points to Data on the Heap and Has a Known Size](ch15-01-box.md)
    - [The `Deref` Trait Allows Access to the Data Through a Reference](ch15-02-deref.md)
    - [The `Drop` Trait Runs Code on Cleanup](ch15-03-drop.md)
    - [`Rc<T>`, the Reference Counted Smart Pointer](ch15-04-rc.md)
    - [`RefCell<T>` and the Interior Mutability Pattern](ch15-05-interior-mutability.md)
    - [Creating Reference Cycles and Leaking Memory is Safe](ch15-06-reference-cycles.md)

- [Fearless Concurrency](ch16-00-concurrency.md)
    - [Threads](ch16-01-threads.md)
    - [Message Passing](ch16-02-message-passing.md)
    - [Shared State](ch16-03-shared-state.md)
    - [Extensible Concurrency: `Sync` and `Send`](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)

## Advanced Topics

- [Patterns Match the Structure of Values](ch18-00-patterns.md)
    - [All the Places Patterns May be Used](ch18-01-all-the-places-for-patterns.md)
    - [Refutability: Whether a Pattern Might Fail to Match](ch18-02-refutability.md)
    - [All the Pattern Syntax](ch18-03-pattern-syntax.md)

- [Advanced Features](ch19-00-advanced-features.md)
    - [Unsafe Rust](ch19-01-unsafe-rust.md)
    - [Advanced Lifetimes](ch19-02-advanced-lifetimes.md)
    - [Advanced Traits](ch19-03-advanced-traits.md)
    - [Advanced Types](ch19-04-advanced-types.md)
    - [Advanced Functions & 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)
    - [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)

- [Appendix](appendix-00.md)
    - [A - Keywords](appendix-01-keywords.md)
    - [B - Operators and Symbols](appendix-02-operators.md)
    - [C - Derivable Traits](appendix-03-derivable-traits.md)
    - [D - Useful Development Tools](appendix-04-useful-development-tools.md)
    - [E - Editions](appendix-05-editions.md)
    - [F - Translations](appendix-06-translation.md)
    - [G - How Rust is Made and “Nightly Rust”](appendix-07-nightly-rust.md)


================================================
FILE: 2018-edition/src/appendix-00.md
================================================
# Appendix

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../appendix-00.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-00.html).

================================================
FILE: 2018-edition/src/appendix-01-keywords.md
================================================
## Appendix A: Keywords

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../appendix-01-keywords.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-01-keywords.html).

================================================
FILE: 2018-edition/src/appendix-02-operators.md
================================================
## Appendix B: Operators and Symbols

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../appendix-02-operators.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-02-operators.html).

================================================
FILE: 2018-edition/src/appendix-03-derivable-traits.md
================================================
## Appendix C: Derivable Traits

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../appendix-03-derivable-traits.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-03-derivable-traits.html).

================================================
FILE: 2018-edition/src/appendix-04-useful-development-tools.md
================================================
# Appendix D - Useful Development Tools

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../appendix-04-useful-development-tools.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-04-useful-development-tools.html).

================================================
FILE: 2018-edition/src/appendix-05-editions.md
================================================
# Appendix E - Editions

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../appendix-05-editions.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-05-editions.html).

================================================
FILE: 2018-edition/src/appendix-06-translation.md
================================================
## Appendix F: Translations of the Book

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../appendix-06-translation.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-06-translation.html).

================================================
FILE: 2018-edition/src/appendix-07-nightly-rust.md
================================================
# Appendix G - How Rust is Made and “Nightly Rust”

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../appendix-07-nightly-rust.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-07-nightly-rust.html).

================================================
FILE: 2018-edition/src/ch00-00-introduction.md
================================================
# Introduction

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch00-00-introduction.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch00-00-introduction.html).

================================================
FILE: 2018-edition/src/ch01-00-getting-started.md
================================================
# Getting Started

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch01-00-getting-started.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch10-00-getting-started.html).

================================================
FILE: 2018-edition/src/ch01-01-installation.md
================================================
## Installation

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch01-01-installation.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch01-01-installation.html).

================================================
FILE: 2018-edition/src/ch01-02-hello-world.md
================================================
## Hello, World!

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch01-02-hello-world.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch01-02-hello-world.html).

================================================
FILE: 2018-edition/src/ch01-03-hello-cargo.md
================================================
## Hello, Cargo!

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch01-03-hello-cargo.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch01-03-hello-cargo.html).

================================================
FILE: 2018-edition/src/ch02-00-guessing-game-tutorial.md
================================================
# Programming a Guessing Game

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch02-00-guessing-game-tutorial.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch02-00-guessing-game-tutorial.html).

================================================
FILE: 2018-edition/src/ch03-00-common-programming-concepts.md
================================================
# Common Programming Concepts

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch03-00-common-programming-concepts.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-00-common-programming-concepts.html).

================================================
FILE: 2018-edition/src/ch03-01-variables-and-mutability.md
================================================
## Variables and Mutability

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch03-01-variables-and-mutability.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-01-variables-and-mutability.html).

================================================
FILE: 2018-edition/src/ch03-02-data-types.md
================================================
## Data Types

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch03-02-data-types.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-02-data-types.html).

================================================
FILE: 2018-edition/src/ch03-03-how-functions-work.md
================================================
## Functions

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch03-03-how-functions-work.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-03-how-functions-work.html).

================================================
FILE: 2018-edition/src/ch03-04-comments.md
================================================
## Comments

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch03-04-comments.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-04-comments.html).

================================================
FILE: 2018-edition/src/ch03-05-control-flow.md
================================================
## Control Flow

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch03-05-control-flow.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-05-control-flow.html).

================================================
FILE: 2018-edition/src/ch04-00-understanding-ownership.md
================================================
# Understanding Ownership

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch04-00-understanding-ownership.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch04-00-understanding-ownership.html).

================================================
FILE: 2018-edition/src/ch04-01-what-is-ownership.md
================================================
## What Is Ownership?

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch04-01-what-is-ownership.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch04-01-what-is-ownership.html).

================================================
FILE: 2018-edition/src/ch04-02-references-and-borrowing.md
================================================
## References and Borrowing

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch04-02-references-and-borrowing.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch04-02-references-and-borrowing.html).

================================================
FILE: 2018-edition/src/ch04-03-slices.md
================================================
## The Slice Type

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch04-03-slices.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch04-03-slices.html).

================================================
FILE: 2018-edition/src/ch05-00-structs.md
================================================
# Using Structs to Structure Related Data

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch05-00-structs.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch05-00-structs.html).

================================================
FILE: 2018-edition/src/ch05-01-defining-structs.md
================================================
## Defining and Instantiating Structs

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch05-01-defining-structs.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch05-01-defining-structs.html).

================================================
FILE: 2018-edition/src/ch05-02-example-structs.md
================================================
## An Example Program Using Structs

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch05-02-example-structs.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch05-02-example-structs.html).

================================================
FILE: 2018-edition/src/ch05-03-method-syntax.md
================================================
## Method Syntax

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch05-03-method-syntax.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch05-03-method-syntax.html).

================================================
FILE: 2018-edition/src/ch06-00-enums.md
================================================
# Enums and Pattern Matching

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch06-00-enums.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch06-00-enums.html).

================================================
FILE: 2018-edition/src/ch06-01-defining-an-enum.md
================================================
## Defining an Enum

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch06-01-defining-an-enum.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch06-01-defining-an-enum.html).

================================================
FILE: 2018-edition/src/ch06-02-match.md
================================================
## The `match` Control Flow Operator

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch06-02-match.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch06-02-match.html).

================================================
FILE: 2018-edition/src/ch06-03-if-let.md
================================================
## Concise Control Flow with `if let`

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch06-03-if-let.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch06-03-if-let.html).

================================================
FILE: 2018-edition/src/ch07-00-packages-crates-and-modules.md
================================================
# Packages, Crates, and Modules

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch07-00-packages-crates-and-modules.html).

================================================
FILE: 2018-edition/src/ch07-01-packages-and-crates-for-making-libraries-and-executables.md
================================================
## Packages and Crates for Making Libraries and Executables

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch07-01-packages-and-crates-for-making-libraries-and-executables.html).

================================================
FILE: 2018-edition/src/ch07-02-modules-and-use-to-control-scope-and-privacy.md
================================================
## The Module System to Control Scope and Privacy

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch07-02-modules-and-use-to-control-scope-and-privacy.html).

================================================
FILE: 2018-edition/src/ch08-00-common-collections.md
================================================
# Common Collections

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch08-00-common-collections.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch08-00-common-collections.html).

================================================
FILE: 2018-edition/src/ch08-01-vectors.md
================================================
## Storing Lists of Values with Vectors

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch08-01-vectors.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch08-01-vectors.html).

================================================
FILE: 2018-edition/src/ch08-02-strings.md
================================================
## Storing UTF-8 Encoded Text with Strings

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch08-02-strings.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch08-02-strings.html).

================================================
FILE: 2018-edition/src/ch08-03-hash-maps.md
================================================
## Storing Keys with Associated Values in Hash Maps

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch08-03-hash-maps.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch08-03-hash-maps.html).

================================================
FILE: 2018-edition/src/ch09-00-error-handling.md
================================================
# Error Handling

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch09-00-error-handling.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch09-00-error-handling.html).

================================================
FILE: 2018-edition/src/ch09-01-unrecoverable-errors-with-panic.md
================================================
## Unrecoverable Errors with `panic!`

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch09-01-unrecoverable-errors-with-panic.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch09-01-unrecoverable-errors-with-panic.html).

================================================
FILE: 2018-edition/src/ch09-02-recoverable-errors-with-result.md
================================================
## Recoverable Errors with `Result`

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch09-02-recoverable-errors-with-result.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch09-02-recoverable-errors-with-result.html).

================================================
FILE: 2018-edition/src/ch09-03-to-panic-or-not-to-panic.md
================================================
## To `panic!` or Not to `panic!`

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch09-03-to-panic-or-not-to-panic.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch09-03-to-panic-or-not-to-panic.html).

================================================
FILE: 2018-edition/src/ch10-00-generics.md
================================================
# Generic Types, Traits, and Lifetimes

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch10-00-generics.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch10-00-generics.html).

================================================
FILE: 2018-edition/src/ch10-01-syntax.md
================================================
## Generic Data Types

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch10-01-syntax.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch10-01-syntax.html).

================================================
FILE: 2018-edition/src/ch10-02-traits.md
================================================
## Traits: Defining Shared Behavior

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch10-02-traits.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch10-02-traits.html).

================================================
FILE: 2018-edition/src/ch10-03-lifetime-syntax.md
================================================
## Validating References with Lifetimes

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch10-03-lifetime-syntax.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch10-03-lifetime-syntax.html).

================================================
FILE: 2018-edition/src/ch11-00-testing.md
================================================
# Writing Automated Tests

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch11-00-testing.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch11-00-testing.html).

================================================
FILE: 2018-edition/src/ch11-01-writing-tests.md
================================================
## How to Write Tests

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch11-01-writing-tests.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch11-01-writing-tests.html).

================================================
FILE: 2018-edition/src/ch11-02-running-tests.md
================================================
## Controlling How Tests Are Run

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch11-02-running-tests.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch11-02-running-tests.html).

================================================
FILE: 2018-edition/src/ch11-03-test-organization.md
================================================
## Test Organization

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch11-03-test-organization.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch11-03-test-organization.html).

================================================
FILE: 2018-edition/src/ch12-00-an-io-project.md
================================================
# An I/O Project: Building a Command Line Program

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch12-00-an-io-project.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-00-an-io-project.html).

================================================
FILE: 2018-edition/src/ch12-01-accepting-command-line-arguments.md
================================================
## Accepting Command Line Arguments

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch12-01-accepting-command-line-arguments.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-01-accepting-command-line-arguments.html).

================================================
FILE: 2018-edition/src/ch12-02-reading-a-file.md
================================================
## Reading a File

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch12-02-reading-a-file.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-02-reading-a-file.html).

================================================
FILE: 2018-edition/src/ch12-03-improving-error-handling-and-modularity.md
================================================
## Refactoring to Improve Modularity and Error Handling

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch12-03-improving-error-handling-and-modularity.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-03-improving-error-handling-and-modularity.html).

================================================
FILE: 2018-edition/src/ch12-04-testing-the-librarys-functionality.md
================================================
## Developing the Library’s Functionality with Test-Driven Development

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch12-04-testing-the-librarys-functionality.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-04-testing-the-librarys-functionality.html).

================================================
FILE: 2018-edition/src/ch12-05-working-with-environment-variables.md
================================================
## Working with Environment Variables

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch12-05-working-with-environment-variables.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-05-working-with-environment-variables.html).

================================================
FILE: 2018-edition/src/ch12-06-writing-to-stderr-instead-of-stdout.md
================================================
## Writing Error Messages to Standard Error Instead of Standard Output

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch12-06-writing-to-stderr-instead-of-stdout.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-06-writing-to-stderr-instead-of-stdout.html).

================================================
FILE: 2018-edition/src/ch13-00-functional-features.md
================================================
# Functional Language Features: Iterators and Closures

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch13-00-functional-features.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch13-00-functional-features.html).

================================================
FILE: 2018-edition/src/ch13-01-closures.md
================================================
## Closures: Anonymous Functions that Can Capture Their Environment

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch13-01-closures.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch13-01-closures.html).

================================================
FILE: 2018-edition/src/ch13-02-iterators.md
================================================
## Processing a Series of Items with Iterators

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch13-02-iterators.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch13-02-iterators.html).

================================================
FILE: 2018-edition/src/ch13-03-improving-our-io-project.md
================================================
## Improving Our I/O Project

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch13-03-improving-our-io-project.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch13-03-improving-our-io-project.html).

================================================
FILE: 2018-edition/src/ch13-04-performance.md
================================================
## Comparing Performance: Loops vs. Iterators

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch13-04-performance.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch13-04-performance.html).

================================================
FILE: 2018-edition/src/ch14-00-more-about-cargo.md
================================================
# More About Cargo and Crates.io

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch14-00-more-about-cargo.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch14-00-more-about-cargo.html).

================================================
FILE: 2018-edition/src/ch14-01-release-profiles.md
================================================
## Customizing Builds with Release Profiles

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch14-01-release-profiles.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch14-01-release-profiles.html).

================================================
FILE: 2018-edition/src/ch14-02-publishing-to-crates-io.md
================================================
## Publishing a Crate to Crates.io

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch14-02-publishing-to-crates-io.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch14-02-publishing-to-crates-io.html).

================================================
FILE: 2018-edition/src/ch14-03-cargo-workspaces.md
================================================
## Cargo Workspaces

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch14-03-cargo-workspaces.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch14-03-cargo-workspaces.html).

================================================
FILE: 2018-edition/src/ch14-04-installing-binaries.md
================================================
## Installing Binaries from Crates.io with `cargo install`

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch14-04-installing-binaries.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch14-04-installing-binaries.html).

================================================
FILE: 2018-edition/src/ch14-05-extending-cargo.md
================================================
## Extending Cargo with Custom Commands

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch14-05-extending-cargo.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch14-05-extending-cargo.html).

================================================
FILE: 2018-edition/src/ch15-00-smart-pointers.md
================================================
# Smart Pointers

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch15-00-smart-pointers.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-00-smart-pointers.html).

================================================
FILE: 2018-edition/src/ch15-01-box.md
================================================
## Using `Box<T>` to Point to Data on the Heap

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch15-01-box.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-01-box.html).

================================================
FILE: 2018-edition/src/ch15-02-deref.md
================================================
## Treating Smart Pointers Like Regular References with the `Deref` Trait

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch15-02-deref.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-02-deref.html).

================================================
FILE: 2018-edition/src/ch15-03-drop.md
================================================
## Running Code on Cleanup with the `Drop` Trait

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch15-03-drop.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-03-drop.html).

================================================
FILE: 2018-edition/src/ch15-04-rc.md
================================================
## `Rc<T>`, the Reference Counted Smart Pointer

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch15-04-rc.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-04-rc.html).

================================================
FILE: 2018-edition/src/ch15-05-interior-mutability.md
================================================
## `RefCell<T>` and the Interior Mutability Pattern

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch15-05-interior-mutability.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-05-interior-mutability.html).

================================================
FILE: 2018-edition/src/ch15-06-reference-cycles.md
================================================
## Reference Cycles Can Leak Memory

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch15-06-reference-cycles.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-06-reference-cycles.html).

================================================
FILE: 2018-edition/src/ch16-00-concurrency.md
================================================
# Fearless Concurrency

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch16-00-concurrency.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch16-00-concurrency.html).

================================================
FILE: 2018-edition/src/ch16-01-threads.md
================================================
## Using Threads to Run Code Simultaneously

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch16-01-threads.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch16-01-threads.html).

================================================
FILE: 2018-edition/src/ch16-02-message-passing.md
================================================
## Using Message Passing to Transfer Data Between Threads

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch16-02-message-passing.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch16-02-message-passing.html).

================================================
FILE: 2018-edition/src/ch16-03-shared-state.md
================================================
## Shared-State Concurrency

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch16-03-shared-state.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch16-03-shared-state.html).

================================================
FILE: 2018-edition/src/ch16-04-extensible-concurrency-sync-and-send.md
================================================
## Extensible Concurrency with the `Sync` and `Send` Traits

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch16-04-extensible-concurrency-sync-and-send.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch16-04-extensible-concurrency-sync-and-send.html).

================================================
FILE: 2018-edition/src/ch17-00-oop.md
================================================
# Object Oriented Programming Features of Rust

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch18-00-oop.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch17-00-oop.html).


================================================
FILE: 2018-edition/src/ch17-01-what-is-oo.md
================================================
## Characteristics of Object-Oriented Languages

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch18-01-what-is-oo.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch17-01-what-is-oo.html).


================================================
FILE: 2018-edition/src/ch17-02-trait-objects.md
================================================
## Using Trait Objects that Allow for Values of Different Types

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch18-02-trait-objects.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch17-02-trait-objects.html).


================================================
FILE: 2018-edition/src/ch17-03-oo-design-patterns.md
================================================
## Implementing an Object-Oriented Design Pattern

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch18-03-oo-design-patterns.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch17-03-oo-design-patterns.html).


================================================
FILE: 2018-edition/src/ch18-00-patterns.md
================================================
# Patterns and Matching

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch19-00-patterns.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch18-00-patterns.html).


================================================
FILE: 2018-edition/src/ch18-01-all-the-places-for-patterns.md
================================================
## All the Places Patterns Can Be Used

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch19-01-all-the-places-for-patterns.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch18-01-all-the-places-for-patterns.html).


================================================
FILE: 2018-edition/src/ch18-02-refutability.md
================================================
## Refutability: Whether a Pattern Might Fail to Match

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch19-02-refutability.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch18-02-refutability.html).


================================================
FILE: 2018-edition/src/ch18-03-pattern-syntax.md
================================================
## Pattern Syntax

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch19-03-pattern-syntax.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch18-03-pattern-syntax.html).


================================================
FILE: 2018-edition/src/ch19-00-advanced-features.md
================================================
# Advanced Features

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-00-advanced-features.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-00-advanced-features.html).


================================================
FILE: 2018-edition/src/ch19-01-unsafe-rust.md
================================================
## Unsafe Rust

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-01-unsafe-rust.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-01-unsafe-rust.html).


================================================
FILE: 2018-edition/src/ch19-02-advanced-lifetimes.md
================================================
## Advanced Lifetimes

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-02-advanced-lifetimes.html).

================================================
FILE: 2018-edition/src/ch19-03-advanced-traits.md
================================================
## Advanced Traits

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-02-advanced-traits.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-03-advanced-traits.html).


================================================
FILE: 2018-edition/src/ch19-04-advanced-types.md
================================================
## Advanced Types

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-03-advanced-types.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-04-advanced-types.html).


================================================
FILE: 2018-edition/src/ch19-05-advanced-functions-and-closures.md
================================================
## Advanced Functions and Closures

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-04-advanced-functions-and-closures.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-05-advanced-functions-and-closures.html).


================================================
FILE: 2018-edition/src/ch19-06-macros.md
================================================
## Macros

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-05-macros.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-06-macros.html).


================================================
FILE: 2018-edition/src/ch20-00-final-project-a-web-server.md
================================================
# Final Project: Building a Multithreaded Web Server

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch21-00-final-project-a-web-server.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch20-00-final-project-a-web-server.html).


================================================
FILE: 2018-edition/src/ch20-01-single-threaded.md
================================================
## Building a Single-Threaded Web Server

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch21-01-single-threaded.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch20-01-single-threaded.html).


================================================
FILE: 2018-edition/src/ch20-02-multithreaded.md
================================================
## Turning Our Single-Threaded Server into a Multithreaded Server

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch21-02-multithreaded.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch20-02-multithreaded.html).


================================================
FILE: 2018-edition/src/ch20-03-graceful-shutdown-and-cleanup.md
================================================
## Graceful Shutdown and Cleanup

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch21-03-graceful-shutdown-and-cleanup.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch20-03-graceful-shutdown-and-cleanup.html).


================================================
FILE: 2018-edition/src/foreword.md
================================================
# Foreword

The 2018 edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../foreword.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/foreword.html).

================================================
FILE: ADMIN_TASKS.md
================================================
# Administrative Tasks

This documentation is for anyone managing the repo to remember how to do
occasional maintenance tasks.

## Update the `rustc` version

- Delete your `target` directory, you're about to recompile everything anyway
- Change the version number in `.github/workflows/main.yml`
- Change the version number in `rust-toolchain`, which should change the
  version you're using locally with `rustup`
- Change the version number in `src/title-page.md`
- Run `./tools/update-rustc.sh` (see its commented code for details on what it
  does)
- Inspect the changes (by looking at the files changed according to git) and
  their effects (by looking at the files in `tmp/book-before` and
  `tmp/book-after`) and commit them if they look good
- Grep for `manual-regeneration` and follow the instructions in those places to
  update output that cannot be generated by a script

## Update the `edition` in all listings

To update the `edition = "[year]"` metadata in all the listings' `Cargo.toml`s,
run the `./tools/update-editions.sh` script. Check the diff to make sure it
looks reasonable, and in particular check whether the updates necessitate any
changes to the text. Then commit the changes.

## Update the `edition` in mdBook config

Open `book.toml` and `nostarch/book.toml` and set the `edition` value in the
`[rust]` table to the new edition.

## Release a new version of the listings

We now make `.tar` files of complete projects containing every listing
available [as GitHub Releases](https://github.com/rust-lang/book/releases). To
create a new release artifact, for example if there have been code changes due
to edits or due to updating Rust and `rustfmt`, do the following:

- Create a git tag for the release and push it to GitHub, or create a new tag
  by going to the GitHub UI, [drafting a new release](https://github.com/rust-lang/book/releases/new), and entering a new
  tag instead of selecting an existing tag
- Run `cargo run --bin release_listings`, which will generate
  `tmp/listings.tar.gz`
- Upload `tmp/listings.tar.gz` in the GitHub UI for the draft release
- Publish the release

## Add a new listing

To facilitate the scripts that run `rustfmt` on all the listings, update the
output when the compiler is updated, and produce release artifacts containing
full projects for the listings, any listing beyond the most trivial should be
extracted into a file. To do that:

- Find where the new listing should go in the `listings` directory.
  - There is one subdirectory for each chapter
  - Numbered listings should use `listing-[chapter num]-[listing num]` for
    their directory names.
  - Listings without a number should start with `no-listing-` followed by a
    number that indicates its position in the chapter relative to the other
    listings without numbers in the chapter, then a short description that
    someone could read to find the code they're looking for.
  - Listings used only for displaying the output of the code (for example, when
    we say "if we had written x instead of y, we would get this compiler
    error:" but we don't actually show code x) should be named with
    `output-only-` followed by a number that indicates its position in the
    chapter relative to the other listings used only for output, then a short
    description that authors or contributors could read to find the code
    they're looking for.
  - **Remember to adjust surrounding listing numbers as appropriate!**
- Create a full Cargo project in that directory, either by using `cargo new` or
  copying another listing as a starting point.
- Add the code and any surrounding code needed to create a full working example.
- If you only want to show part of the code in the file, use anchor comments
  (`// ANCHOR: some_tag` and `// ANCHOR_END: some_tag`) to mark the parts of
  the file you want to show.
- For Rust code, use the `{{#rustdoc_include [filename:some_tag]}}` directive
  within the code blocks in the text. The `rustdoc_include` directive gives the
  code that doesn't get displayed to `rustdoc` for `mdbook test` purposes.
- For anything else, use the `{{#include [filename:some_tag]}}` directive.
- If you want to display the output of a command in the text as well, create an
  `output.txt` file in the listing's directory as follows:
  - Run the command, like `cargo run` or `cargo test`, and copy all of the
    output.
  - Create a new `output.txt` file with the first line `$ [the command you
	  ran]`.
  - Paste the output you just copied.
  - Run `./tools/update-rustc.sh`, which should perform some normalization on
    the compiler output.
  - Include the output in the text with the `{{#include [filename]}}` directive.
  - Add and commit output.txt.
- If you want to display output but for some reason it can't be generated by a
  script (say, because of user input or external events like making a web
  request), keep the output inline but make a comment that contains
  `manual-regeneration` and instructions for manually updating the inline
  output.
- If you don't want this example to even be attempted to be formatted by
  `rustfmt` (for example because the example doesn't parse on purpose), add a
  `rustfmt-ignore` file in the listing's directory and the reason it's not
  being formatted as the contents of that file (in case it's a rustfmt bug that
  might get fixed someday).

## See the effect of some change on the rendered book

To check, say, updating `mdbook` or changing the way files get included:

- Generate a built book before the change you want to test by running `mdbook
  build -d tmp/book-before`
- Apply the changes you want to test and run `mdbook build -d tmp/book-after`
- Run `./tools/megadiff.sh`
- Files remaining in `tmp/book-before` and `tmp/book-after` have differences
  you can manually inspect with your favorite diff viewing mechanism

## Produce new markdown files for No Starch

- Run `./tools/nostarch.sh`
- Spot check the files that script created in the `nostarch` directory
- Check them into git if you're starting a round of edits

## Produce markdown from docx for diffing

- Save the docx file to `tmp/chapterXX.docx`.
- In Word, go to the review tab, choose "Accept all changes and stop tracking"
- Save the docx again and close Word
- Run `./tools/doc-to-md.sh`
- This should write `nostarch/chapterXX.md`. Adjust the XSL in
  `tools/doc-to-md.xsl` and run `./tools/doc-to-md.sh` again if needed.

## Generate Graphviz dot

We're using [Graphviz](http://graphviz.org/) for some of the diagrams in the
book. The source for those files live in the `dot` directory. To turn a `dot`
file, for example, `dot/trpl04-01.dot` into an `svg`, run:

```bash
$ dot dot/trpl04-01.dot -Tsvg > src/img/trpl04-01.svg
```

In the generated SVG, remove the width and the height attributes from the `svg`
element and set the `viewBox` attribute to `0.00 0.00 1000.00 1000.00` or other
values that don't cut off the image.

## Publish a preview to GitHub Pages

We sometimes publish to GitHub Pages for in-progress previews. The recommended
flow for publishing is:

- Install the `ghp-import` tool by running `pip install ghp-import` (or `pipx install ghp-import`, using [pipx][pipx]).
- In the root, run `tools/generate-preview.sh`

[pipx]: https://pipx.pypa.io/stable/#install-pipx


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing

We'd love your help! Thanks for caring about the book.

## Where to Edit

All edits should be made in the `src` directory.

The `nostarch` directory contains snapshots for sending edits to the publishers
of the print version. The snapshot files reflect what has been sent or not, so
they only get updated when edits are sent to No Starch. **Do not submit pull
requests changing files in the `nostarch` directory, they will be closed.**

We use [`rustfmt`][rustfmt] to apply standard formatting to Rust code in the
repo and [`dprint`][dprint] to apply standard formatting to the Markdown source
and the non-Rust code in the project.

[rustfmt]: https://github.com/rust-lang/rustfmt
[dprint]: https://dprint.dev

You will normally have `rustfmt` installed if you have a Rust toolchain
installed; if for some reason you do not have a copy of `rustfmt`, you can add
it by running the following command:

```sh
rustup component add rustfmt
```

To install `dprint`, you can run the following command:

```sh
cargo install dprint
```

Or follow the [instructions][install-dprint] on the `dprint` website.

[install-dprint]: https://dprint.dev/install/

To format Rust code, you can run `rustfmt <path to file>`, and to format other
files, you can pass `dprint fmt <path to file>`. Many text editors also have native
support or extensions for both `rustfmt` and `dprint`.

## Checking for Fixes

The book rides the Rust release trains. Therefore, if you see a problem on
https://doc.rust-lang.org/stable/book, it may already be fixed on the `main`
branch in this repo, but the fix hasn't gone through nightly -> beta -> stable
yet. Please check the `main` branch in this repo before reporting an issue.

Looking at the history for a particular file can also give more information on
how or whether an issue has been fixed or not if you're trying to figure that
out.

Please also search open and closed issues and open and closed PRs before
reporting a new issue or opening a new PR.

## Licensing

This repository is under the same license as Rust itself, MIT/Apache2. You
can find the full text of each license in the `LICENSE-*` files in this
repository.

## Code of Conduct

The Rust project has [a code of conduct](http://rust-lang.org/policies/code-of-conduct)
that governs all sub-projects, including this one. Please respect it!

## Expectations

Because the book is [printed][nostarch], and because we want
to keep the online version of the book close to the print version when
possible, it may take longer than you're used to for us to address your issue
or pull request.

[nostarch]: https://nostarch.com/rust-programming-language-2nd-edition

So far, we've been doing a larger revision to coincide with [Rust Editions](https://doc.rust-lang.org/edition-guide/). Between those larger
revisions, we will only be correcting errors. If your issue or pull request
isn't strictly fixing an error, it might sit until the next time that we're
working on a large revision: expect on the order of months or years. Thank you
for your patience!

## Help wanted

If you're looking for ways to help that don't involve large amounts of
reading or writing, check out the [open issues with the E-help-wanted
label][help-wanted]. These might be small fixes to the text, Rust code,
frontend code, or shell scripts that would help us be more efficient or
enhance the book in some way!

[help-wanted]: https://github.com/rust-lang/book/issues?q=is%3Aopen+is%3Aissue+label%3AE-help-wanted

## Translations

We'd love help translating the book! See the [Translations] label to join in
efforts that are currently in progress. Open a new issue to start working on
a new language! We're waiting on [mdbook support] for multiple languages
before we merge any in, but feel free to start!

[Translations]: https://github.com/rust-lang/book/issues?q=is%3Aopen+is%3Aissue+label%3ATranslations
[mdbook support]: https://github.com/rust-lang/mdBook/issues/5


================================================
FILE: COPYRIGHT
================================================
This repository is licensed under the Apache License, Version 2.0
<LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0> or the MIT
license <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your option.


================================================
FILE: Cargo.toml
================================================
[workspace]
members = ["packages/tools"]
default-members = ["packages/tools"]
resolver = "2"
exclude = [
    "linkchecker", # linkchecker is part of the CI workflow
    "listings",    # these are intentionally distinct from the workspace
    "tmp",         # listings are built here when updating output via tools/update-rustc.sh
]

[workspace.dependencies]
walkdir = "2.3.1"
docopt = "1.1.0"
serde = "1.0"
regex = "1.3.3"
lazy_static = "1.4.0"
flate2 = "1.0.13"
tar = "0.4.26"


================================================
FILE: LICENSE-APACHE
================================================
                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright 2010 The Rust Project Developers

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


================================================
FILE: LICENSE-MIT
================================================
Copyright (c) 2010 The Rust Project Developers

Permission is hereby granted, free of charge, to any
person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the
Software without restriction, including without
limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software
is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice
shall be included in all copies or substantial portions
of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.


================================================
FILE: README.md
================================================
# The Rust Programming Language

![Build Status](https://github.com/rust-lang/book/workflows/CI/badge.svg)

This repository contains the source of "The Rust Programming Language" book.

[The book is available in dead-tree form from No Starch Press][nostarch].

[nostarch]: https://nostarch.com/rust-programming-language-2nd-edition

You can also read the book for free online. Please see the book as shipped with
the latest [stable], [beta], or [nightly] Rust releases. Be aware that issues
in those versions may have been fixed in this repository already, as those
releases are updated less frequently.

[stable]: https://doc.rust-lang.org/stable/book/
[beta]: https://doc.rust-lang.org/beta/book/
[nightly]: https://doc.rust-lang.org/nightly/book/

See the [releases] to download just the code of all the code listings that appear in the book.

[releases]: https://github.com/rust-lang/book/releases

## Requirements

Building the book requires [mdBook], ideally the same version that
rust-lang/rust uses in [this file][rust-mdbook]. To get it:

[mdBook]: https://github.com/rust-lang/mdBook
[rust-mdbook]: https://github.com/rust-lang/rust/blob/HEAD/src/tools/rustbook/Cargo.toml

```bash
$ cargo install mdbook --locked --version <version_num>
```

## Building

To build the book, type:

```bash
$ mdbook build
```

The output will be in the `book` subdirectory. To check it out, open it in
your web browser.

_Firefox:_

```bash
$ firefox book/index.html                       # Linux
$ open -a "Firefox" book/index.html             # OS X
$ Start-Process "firefox.exe" .\book\index.html # Windows (PowerShell)
$ start firefox.exe .\book\index.html           # Windows (Cmd)
```

_Chrome:_

```bash
$ google-chrome book/index.html                 # Linux
$ open -a "Google Chrome" book/index.html       # OS X
$ Start-Process "chrome.exe" .\book\index.html  # Windows (PowerShell)
$ start chrome.exe .\book\index.html            # Windows (Cmd)
```

To run the tests:

```bash
$ cd packages/trpl
$ mdbook test --library-path packages/trpl/target/debug/deps
```

## Contributing

We'd love your help! Please see [CONTRIBUTING.md][contrib] to learn about the
kinds of contributions we're looking for.

[contrib]: https://github.com/rust-lang/book/blob/main/CONTRIBUTING.md

Because the book is [printed][nostarch], and because we want
to keep the online version of the book close to the print version when
possible, it may take longer than you're used to for us to address your issue
or pull request.

So far, we've been doing a larger revision to coincide with [Rust Editions](https://doc.rust-lang.org/edition-guide/). Between those larger
revisions, we will only be correcting errors. If your issue or pull request
isn't strictly fixing an error, it might sit until the next time that we're
working on a large revision: expect on the order of months or years. Thank you
for your patience!

### Translations

We'd love help translating the book! See the [Translations] label to join in
efforts that are currently in progress. Open a new issue to start working on
a new language! We're waiting on [mdbook support] for multiple languages
before we merge any in, but feel free to start!

[Translations]: https://github.com/rust-lang/book/issues?q=is%3Aopen+is%3Aissue+label%3ATranslations
[mdbook support]: https://github.com/rust-lang/mdBook/issues/5

## Spellchecking

To scan source files for spelling errors, you can use the `spellcheck.sh`
script available in the `ci` directory. It needs a dictionary of valid words,
which is provided in `ci/dictionary.txt`. If the script produces a false
positive (say, you used the word `BTreeMap` which the script considers invalid),
you need to add this word to `ci/dictionary.txt` (keep the sorted order for
consistency).


================================================
FILE: TODO.md
================================================
# In each chapter

- [ ] Manual regeneration
- [ ] Check for upstream changes from last snapshot
- [ ] Propagate updated output to docx
- [ ] Extract docx and check diff
- [ ] Answer all comments
- [ ] Check cross references
- [ ] Check indentation of --snip--
- [ ] Numbered lines, Gray out unchanged lines
- [ ] Check line wrapping
- [ ] Check for unneeded command/compiling/running output
- [ ] Check println style and error messages
- [ ] Add alt text to images
- [ ] Index tags
  - [ ] search for "convention" conventions:naming:of blah
  - [ ] check for double spaces, spaces at the end of paragraphs


================================================
FILE: book.toml
================================================
# Sync any changes to this *other than where explicitly specified* with the copy
# in `nostarch/book.toml`!

[book]
title = "The Rust Programming Language"
authors = ["Steve Klabnik", "Carol Nichols", "Chris Krycho", "Contributions from the Rust Community"]

[output.html]
additional-css = ["ferris.css", "theme/2018-edition.css", "theme/semantic-notes.css", "theme/listing.css"]
additional-js = ["ferris.js"]
git-repository-url = "https://github.com/rust-lang/book"

[output.html.search]
use-boolean-and = true

[output.html.redirect]
"ch17-00-oop.html" = "ch18-00-oop.html"
"ch17-01-what-is-oo.html" = "ch18-01-what-is-oo.html"
"ch17-02-trait-objects.html" = "ch18-02-trait-objects.html"
"ch17-03-oo-design-patterns.html" = "ch18-03-oo-design-patterns.html"
"ch18-00-patterns.html" = "ch19-00-patterns.html"
"ch18-01-all-the-places-for-patterns.html" = "ch19-01-all-the-places-for-patterns.html"
"ch18-02-refutability.html" = "ch19-02-refutability.html"
"ch18-03-pattern-syntax.html" = "ch19-03-pattern-syntax.html"
"ch19-00-advanced-features.html" = "ch20-00-advanced-features.html"
"ch19-01-unsafe-rust.html" = "ch20-01-unsafe-rust.html"
"ch19-03-advanced-traits.html" = "ch20-02-advanced-traits.html"
"ch20-03-advanced-traits.html" = "ch20-02-advanced-traits.html"
"ch19-04-advanced-types.html" = "ch20-03-advanced-types.html"
"ch20-04-advanced-types.html" = "ch20-03-advanced-types.html"
"ch19-05-advanced-functions-and-closures.html" = "ch20-04-advanced-functions-and-closures.html"
"ch20-05-advanced-functions-and-closures.html" = "ch20-04-advanced-functions-and-closures.html"
"ch19-06-macros.html" = "ch20-05-macros.html"
"ch20-06-macros.html" = "ch20-05-macros.html"
"ch20-00-final-project-a-web-server.html" = "ch21-00-final-project-a-web-server.html"
"ch20-01-single-threaded.html" = "ch21-01-single-threaded.html"
"ch20-02-multithreaded.html" = "ch21-02-multithreaded.html"
"ch20-03-graceful-shutdown-and-cleanup.html" = "ch21-03-graceful-shutdown-and-cleanup.html"

# Do not sync this preprocessor; it is for the HTML renderer only.
[preprocessor.trpl-note]
command = "cargo run --manifest-path packages/mdbook-trpl/Cargo.toml --bin mdbook-trpl-note"

[preprocessor.trpl-listing]
command = "cargo run --manifest-path packages/mdbook-trpl/Cargo.toml --bin mdbook-trpl-listing"
output-mode = "default"

[rust]
edition = "2024"

[build]
extra-watch-dirs = ["packages/mdbook-trpl"]


================================================
FILE: ci/dictionary.txt
================================================
personal_ws-1.1 en 0 utf-8
abcabcabc
abcd
abcdefghijklmnopqrstuvwxyz
ABIs
AddAssign
Addr
adfb
afdc
aggregator
AGraph
aliasability
alignof
alloc
allocator
AlwaysEqual
Amir
anotherusername
APIs
app's
aren
args
ArgumentV
associativity
async
atomics
attr
autocompletion
AveragedCollection
backend
backported
backtrace
backtraces
BACKTRACE
Backtraces
Baz's
beefeb
benchmarking
bioinformatics
bitand
BitAnd
BitAndAssign
bitor
BitOr
BitOrAssign
bitwise
Bitwise
bitxor
BitXor
BitXorAssign
Bjarne
Boehm
bool
boolean
Boolean
Booleans
booleans
Bors
BorrowMutError
BoxMeUp
boxt
BTreeSet
BufRead
BufReader
BuildHasher
byteorder
Cacher
cacher
Cagain
callsite
CamelCase
cargodoc
centric
chacha
ChangeColor
ChangeColorMessage
charset
choo
chXX
chYY
clippy
clippy's
cmdlet
coercions
combinator
ConcreteType
config
Config
confignew
const
consts
constant's
copyeditor
couldn
CPUs
cratesio
CRLF
cryptocurrencies
cryptographic
cryptographically
CStr
CString
ctrl
Ctrl
customizable
CustomSmartPointer
CustomSmartPointers
data's
DataStruct
dbea
deallocate
deallocated
deallocating
deallocation
debounce
debuginfo
decl
decrementing
deduplicate
deduplicating
deps
deref
Deref
dereference
Dereference
dereferenced
dereferences
dereferencing
DerefMut
DeriveInput
Dest
destructor
destructure
destructured
destructures
destructuring
Destructuring
deterministically
DevOps
devtools
didn
Dobrý
doccargo
doccratesio
DOCTYPE
doesn
disambiguating
DisplayBacktrace
DivAssign
DraftPost
DSTs
durations
ebook
ebooks
Edsger
efdcd
egular
ElementRef
else's
emoji
encodings
enum
Enum
enums
enum's
Enums
eprintln
Erlang
ErrorKind
Español
ETAPS
eval
executables
ExitCode
expr
extern
favicon
ferris
FFFD
FFFF
figcaption
fieldname
filename
Filename
filesystem
Filesystem
filesystem's
filesystems
filmmaking
Firefox
FirstAwaitPoint
FnMut
FnOnce
formatter
formatters
FrenchToast
FromIterator
FromResidual
frontend
FuturesUnordered
GetAwaitPoint
getrandom
getter
getters
GGraph
GitHub
gitignore
grapheme
Grapheme
growable
gzip
handcoded
handoff
hardcode
hardcoded
hardcoding
hasher
hashers
HashMap
HashSet
Haskell
hasn
HeadB
HeadC
HelloMacro
helloworld
HelloWorld
HelloWorldName
Hmmm
Hoare
Hola
homogenous
html
http
https
hyperoptimize
hypotheticals
Iceburgh
ident
IDE
IDEs
IDE's
IEEE
impl
implementor
implementors
ImportantExcerpt
incrementing
IndexMut
indices
init
initializer
initializers
inline
instantiation
internet
interoperate
IntoFuture
IntoIterator
intra
intratask
InvalidDigit
invariants
ioerror
iokind
ioresult
IoResult
iostdin
IpAddr
IpAddrKind
irst
isize
iter
iterator's
JavaScript
JoinAll
JoinHandle
Kay's
kinded
Klabnik
Krycho
lang
LastWriteTime
latin
liballoc
libc
libcollections
libcore
libpanic
librarys
libreoffice
libstd
libunwind
lifecycle
LimitTracker
linter
LLVM
lobally
locators
LockResult
login
lookup
loopback
lossy
Lukas
lval
macOS
Matsakis
mathematic
mdbook
memoization
metadata
Metadata
metaprogramming
metavariable
mibbit
Mibbit
microcontroller
microcontrollers
millis
minigrep
Miri
miri
mixup
mkdir
MockMessenger
modifiability
modularity
monomorphization
Monomorphization
monomorphized
MoveMessage
Mozilla
mpsc
MSRV
msvc
MulAssign
multibyte
multithreaded
multithreading
mutex
mutex's
Mutex
mutexes
Mutexes
MutexGuard
mutext
mutextarct
MyAsyncStateMachine
MyBox
myprogram
namespace
namespaced
namespaces
namespacing
natively
newfound
NewJob
NewsArticle
NewThread
newtype
newtypes
nitty
nocapture
nomicon
nonadministrators
nondeterministic
nonequality
nongeneric
noplayground
NoStarch
NotFound
nsprust
null's
OCaml
offsetof
online
OpenGL
optimizations
OptionalFloatingPointNumber
OptionalNumber
optiont
OsStr
OsString
other's
otherinstall
OtherError
OurError
OutlinePrint
overloadable
overread
PageTitleFuture
PanicPayload
parallelizable
param
parameterize
ParseIntError
PartialEq
PartialOrd
pbcopy
PendingReview
PendingReviewPost
PlaceholderType
polymorphism
PoolCreationError
por
portia
postfix
powershell
PowerShell
powi
preallocate
preallocates
preprocessing
Preprocessing
preprocessor
PrimaryColor
println
priv
proc
proto
pseudocode
pthreads
pushups
QuitMessage
quux
RAII
randcrate
RangeFrom
RangeTo
RangeFull
README
READMEs
ReadFinished
ReceiverStream
rect
recurse
recv
redeclaring
Refactoring
refactor
refactoring
refcell
RefCell
refcellt
refcelltrct
RefMut
reformats
refutability
reimplement
RemAssign
repost
repr
representable
request's
resizes
resizing
ReturnedError
retweet
rewordings
rint
ripgrep
Rumbul
runnable
runtime
runtimes
Rustacean
Rustaceans
rUsT
rustc
rustdoc
RUSTFLAGS
Rustonomicon
rustfix
rustfmt
RustLangES
rustup
sampleproject
screenshot
searchstring
SecondaryColor
SecondAwaitPoint
SelectBox
semver
SemVer
serde
ShirtColor
ShlAssign
ShrAssign
shouldn
Simula
siphash
SipHash
situps
sizeof
SliceIndex
Smalltalk
snuck
SocialPost
someproject
SomeType
someusername
SPDX
spdx
SpreadsheetCell
sqrt
stackoverflow
startup
StaticRef
stderr
stdin
Stdin
stdlib
stdout
steveklabnik's
stringify
StreamExt
Stroustrup
Stroustrup's
struct
Struct
structs
struct's
Structs
StrWrap
SubAssign
subclasses
subcommand
subcommands
subdirectories
subdirectory
submodule
submodules
Submodules
submodule’s
suboptimal
subpath
subslices
substring
subtasks
subteams
subtree
subtyping
summarizable
supertrait
supertraits
TcpListener
TcpStream
templating
test's
TextAwaitPoint
TextField
That'd
there'd
ThreadPool
threadpool
timestamp
Tiếng
timeline
tlborm
tlsv
TODO
TokenStream
Tokio
tokio
toml
TOML
toolchain
toolchains
ToString
tradeoff
tradeoffs
TrafficLight
transcoding
trpl
tuesday
tuple
tuples
turbofish
Turon
typeof
TypeName
UFCS
unary
Unary
uncomment
Uncomment
uncommenting
unevaluated
unhandled
unicode
Uninstalling
uninstall
unittests
unix
unpopulated
unoptimized
UnsafeCell
unsafety
unsized
unsynchronized
Unyank
UpperCamelCase
URIs
urls
UsefulType
username
USERPROFILE
usize
UsState
util
utils
vals
variable's
variant's
vers
versa
vert
Versioning
visualstudio
Vlissides
vscode
vtable
waitlist
wasi
wasn
weakt
WeatherForecast
webpage
WebSocket
whitespace
wildcard
wildcards
Wirth
workflow
workspace
workspaces
Workspaces
wouldn
writeln
WriteMessage
xcode
xpression
yyyy
zerocopy
ZipImpl


================================================
FILE: ci/spellcheck.sh
================================================
#!/bin/bash

set -eu

aspell --version

# Checks project Markdown files for spelling mistakes.

# Notes:

# This script needs dictionary file ($dict_filename) with project-specific
# valid words. If this file is missing, first invocation of a script generates
# a file of words considered typos at the moment. User should remove real typos
# from this file and leave only valid words. When script generates false
# positive after source modification, new valid word should be added
# to dictionary file.

# Default mode of this script is interactive. Each source file is scanned for
# typos. aspell opens window, suggesting fixes for each found typo. Original
# files with errors will be backed up to files with format "filename.md.bak".

# When running in CI, this script should be run in "list" mode (pass "list"
# as first argument). In this mode script scans all files and reports found
# errors. Exit code in this case depends on scan result:
# 1 if any errors found,
# 0 if all is clear.

# Script skips words with length less than or equal to 3. This helps to avoid
# some false positives.

# We can consider skipping source code in markdown files (```code```) to reduce
# rate of false positives, but then we lose ability to detect typos in code
# comments/strings etc.

shopt -s nullglob

dict_filename=./ci/dictionary.txt
markdown_sources=(./src/*.md)
mode="check"

# aspell repeatedly modifies the personal dictionary for some reason,
# so we should use a copy of our dictionary.
dict_path="/tmp/dictionary.txt"

if [[ "$1" == "list" ]]; then
    mode="list"
fi

# Error if running in list (CI) mode and there isn't a dictionary file;
# creating one in CI won't do any good :(
if [[ "$mode" == "list" && ! -f "$dict_filename" ]]; then
    echo "No dictionary file found! A dictionary file is required in CI!"
    exit 1
fi

if [[ ! -f "$dict_filename" ]]; then
    # Pre-check mode: generates dictionary of words aspell consider typos.
    # After user validates that this file contains only valid words, we can
    # look for typos using this dictionary and some default aspell dictionary.
    echo "Scanning files to generate dictionary file '$dict_filename'."
    echo "Please check that it doesn't contain any misspellings."

    echo "personal_ws-1.1 en 0 utf-8" > "$dict_filename"
    cat "${markdown_sources[@]}" | aspell --ignore 3 list | sort -u >> "$dict_filename"
elif [[ "$mode" == "list" ]]; then
    # List (default) mode: scan all files, report errors.
    declare -i retval=0

    cp "$dict_filename" "$dict_path"

    if [ ! -f $dict_path ]; then
        retval=1
        exit "$retval"
    fi

    for fname in "${markdown_sources[@]}"; do
        command=$(aspell --ignore 3 --personal="$dict_path" "$mode" < "$fname")
        if [[ -n "$command" ]]; then
            for error in $command; do
                # FIXME: find more correct way to get line number
                # (ideally from aspell). Now it can make some false positives,
                # because it is just a grep.
                grep --with-filename --line-number --color=always "$error" "$fname"
            done
            retval=1
        fi
    done
    exit "$retval"
elif [[ "$mode" == "check" ]]; then
    # Interactive mode: fix typos.
    cp "$dict_filename" "$dict_path"

    if [ ! -f $dict_path ]; then
        retval=1
        exit "$retval"
    fi

    for fname in "${markdown_sources[@]}"; do
        aspell --ignore 3 --dont-backup --personal="$dict_path" "$mode" "$fname"
    done
fi


================================================
FILE: ci/validate.sh
================================================
#!/bin/bash

set -eu

for file in src/*.md ; do
    echo Checking references in "$file"
    cargo run --quiet --bin link2print < "$file" > /dev/null
done

================================================
FILE: dot/trpl04-01.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];
    table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
    </TABLE>>];

    edge[tailclip="false"];
    table0:pointer:c -> table1:pointee;
}



================================================
FILE: dot/trpl04-02.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];
    table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];

    table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
    </TABLE>>];

    edge[tailclip="false"];
    table0:pointer:c -> table1:pointee;
    table3:pointer:c -> table1:pointee;
}



================================================
FILE: dot/trpl04-03.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];
    table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
    </TABLE>>];

    table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];
    table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
    </TABLE>>];


    edge[tailclip="false"];
    table0:pointer:c -> table1:pointee;
    table3:pointer:c -> table4:pointee;
}



================================================
FILE: dot/trpl04-04.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="gray">
        <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];
    table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];

    table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
    </TABLE>>];

    edge[tailclip="false"];
    table0:pointer:c -> table1:pointee;
    table3:pointer:c -> table1:pointee;
}



================================================
FILE: dot/trpl04-05.dot
================================================
digraph {
   rankdir = LR;
   overlap = false;
   dpi = 300.0;
   node [shape = "plaintext";];
   
   s [label = <<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
      <TR><TD COLSPAN="2" SIDES="B">s</TD></TR>
      <TR><TD>name</TD><TD>value</TD></TR>
      <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
      <TR><TD>len</TD><TD>4</TD></TR>
      <TR><TD>capacity</TD><TD>4</TD></TR>
      </TABLE>>;];
   
   subgraph cluster_heap {
      peripheries = 0;
      rank = "same";
      
      hello [label = <<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="gray">
         <TR><TD>index</TD><TD>value</TD></TR>
         <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
         <TR><TD>1</TD><TD>e</TD></TR>
         <TR><TD>2</TD><TD>l</TD></TR>
         <TR><TD>3</TD><TD>l</TD></TR>
         <TR><TD>4</TD><TD>o</TD></TR>
         </TABLE>>;];
      
      ahoy [label = <<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
         <TR><TD>index</TD><TD>value</TD></TR>
         <TR><TD PORT="pointee">0</TD><TD>a</TD></TR>
         <TR><TD>1</TD><TD>h</TD></TR>
         <TR><TD>2</TD><TD>o</TD></TR>
         <TR><TD>3</TD><TD>y</TD></TR>
         </TABLE>>;];
   }
   
   s -> ahoy [tailport = "pointer:c"; headport = "pointee"; tailclip = false;];
}

================================================
FILE: dot/trpl04-06.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="borrower"></TD></TR>
    </TABLE>>];
    table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD PORT="borrowee">ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
        <TR><TD>capacity</TD><TD>5</TD></TR>
    </TABLE>>];
    table2[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
    </TABLE>>];

    edge[tailclip="false"];
    table1:pointer:c -> table2:pointee;
    table0:borrower:c -> table1:borrowee;
}



================================================
FILE: dot/trpl04-07.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">world</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer2"></TD></TR>
        <TR><TD>len</TD><TD>5</TD></TR>
    </TABLE>>];

    table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">s</TD></TR>
        <TR><TD>name</TD><TD>value</TD></TR>
        <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
        <TR><TD>len</TD><TD>11</TD></TR>
        <TR><TD>capacity</TD><TD>11</TD></TR>
    </TABLE>>];
    table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD>index</TD><TD>value</TD></TR>
        <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
        <TR><TD>1</TD><TD>e</TD></TR>
        <TR><TD>2</TD><TD>l</TD></TR>
        <TR><TD>3</TD><TD>l</TD></TR>
        <TR><TD>4</TD><TD>o</TD></TR>
        <TR><TD>5</TD><TD> </TD></TR>
        <TR><TD PORT="pointee2">6</TD><TD>w</TD></TR>
        <TR><TD>7</TD><TD>o</TD></TR>
        <TR><TD>8</TD><TD>r</TD></TR>
        <TR><TD>9</TD><TD>l</TD></TR>
        <TR><TD>10</TD><TD>d</TD></TR>
    </TABLE>>];


    edge[tailclip="false"];
    table0:pointer2:c -> table4:pointee2;
    table3:pointer:c -> table4:pointee;
}



================================================
FILE: dot/trpl15-01.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
        <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
        <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
        <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
        <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
        <TR><TD>i32</TD><TD>∞</TD></TR>
    </TABLE></TD></TR>
    </TABLE></TD></TR>
    </TABLE></TD></TR>
    </TABLE></TD></TR>
    </TABLE>>];
}



================================================
FILE: dot/trpl15-02.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table0[label=<
    <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
        <TR><TD>i32</TD><TD>
            <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
                <TR><TD SIDES="B">Box</TD></TR>
                <TR><TD>usize</TD></TR>
            </TABLE>
        </TD></TR>
    </TABLE>>];
}



================================================
FILE: dot/trpl15-03.dot
================================================
digraph {
    rankdir=LR;
    overlap=false;
    dpi=300.0;
    node [shape="plaintext"];

    table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD SIDES="B">b</TD><TD SIDES="B" PORT="ptr4"></TD></TR>
    </TABLE>>];

    table5[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD PORT="pte4">3</TD><TD PORT="ptr5">  </TD></TR>
    </TABLE>>];


    table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD SIDES="B">a</TD><TD SIDES="B" PORT="ptr0"></TD></TR>
    </TABLE>>];

    table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD PORT="pte0">5</TD><TD PORT="ptr1">  </TD></TR>
    </TABLE>>];

    table2[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD PORT="pte1">10</TD><TD PORT="ptr2">  </TD></TR>
    </TABLE>>];

    table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD PORT="pte2">Nil</TD></TR>
    </TABLE>>];


    table6[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD SIDES="B">c</TD><TD SIDES="B" PORT="ptr6"></TD></TR>
    </TABLE>>];

    table7[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
        <TR><TD PORT="pte6">4</TD><TD PORT="ptr7">  </TD></TR>
    </TABLE>>];


    edge[tailclip="false"];
    table0:ptr0:c -> table1:pte0;
    table1:ptr1:c -> table2:pte1;
    table2:ptr2:c -> table3:pte2;
    table4:ptr4:c -> table5:pte4;
    table5:ptr5:c -> table1:pte0;
    table6:ptr6:c -> table7:pte6;
    table7:ptr7:c -> table1:pte0;
}



================================================
FILE: dot/trpl15-04.dot
================================================
digraph {
    node[shape=record];
    rankdir=LR;

    l1[label="{<data> 5| <next>}"];
    l2[label="{<data> 10| <next>}"];

    {node[shape=point height=0] invisible_start invisible_end}

    a -> l1:n;
    b -> l2:n;
    invisible_start:n -> l1[arrowtail=none];
    invisible_start:s -> invisible_end:s[dir=none];
    l1:next:c -> l2:data;
    l2:next:c -> invisible_end:n[arrowhead=none];
}


================================================
FILE: dot/trpl17-01.dot
================================================
digraph {
   dpi = 300.0;
   
   rankdir = "LR";
   
   // makes ordering between subgraphs work
   newrank = true;
   
   node [shape = diamond;];
   
   subgraph cluster_task_a {
      label = "Task A";
      
      A1;
      A2;
      A3;
      A4;
      
      A1 -> A2 -> A3 -> A4 -> A0 [style = invis;];
      
      // for vertical alignment purposes only
      A0 [style = invis;];
      
      // Makes the heights line up between the boxes.
      A4 -> A0 [style = invis;];
   }
   
   subgraph cluster_task_b {
      label = "Task B";
      
      B0 [style = invis;];
      
      B1;
      B2;
      B3;
      
      B0 -> B1 -> B2 -> B3 [style = invis;];
   }
   
   A1 -> B1 -> A2 -> B2 -> A3 -> A4 -> B3;
}

================================================
FILE: dot/trpl17-02.dot
================================================
digraph {
   dpi = 300.0;
   
   rankdir = "LR";
   splines = false;
   cluster = true;
   
   node [shape = diamond;];
   
   // The graphs end up with the correct order, i.e. Task 1 *above* Task 2, when
   // this is first.
   subgraph cluster_ColleagueB {
      label = "Task B";
      B1 -> B2 -> B3;
      
      B0 [style = invis;];
      B3 -> B0 [style = invis;];
   }
   
   subgraph cluster_ColleagueA {
      newrank = true;
      label = "Task A";
      A1 -> A2 -> A3 -> A4;
   }
}

================================================
FILE: dot/trpl17-03.dot
================================================
digraph {
   dpi = 300.0;
   
   rankdir = "LR";
   splines = false;
   cluster = true;
   
   node [shape = diamond;];
   
   // The graphs end up with the correct order, i.e. Task 1 *above* Task 2, when
   // this is first.
   subgraph cluster_ColleagueB {
      label = "Task A";
      A1;
      A2;
      A0_1 [style = invis;];
      A3;
      
      A1 -> A2;
      A2 -> A0_1 [arrowhead = "tee"; headport = "A0_1:c"; headclip = false;];
      A0_1;
      A0_1 -> A3 [dir = both; arrowtail = "tee"; tailclip = false;];
   }
   
   subgraph cluster_ColleagueA {
      newrank = true;
      label = "Task B";
      B1 -> B2 -> B3 -> B4;
   }
   
   B3 -> A3;
}

================================================
FILE: dot/trpl17-04.dot
================================================
digraph {
   rankdir = RL;
   overlap = false;
   dpi = 300.0;
   splines = false;
   cluster = true;
   
   node [shape = "plaintext";];
   
   fut1 [label = <<table border="0" cellborder="1" cellspacing="0">
      <tr><td sides="B">fut1</td></tr>
      <tr><td>0</td></tr>
      <tr><td port="target">1</td></tr>
      <tr><td port="source">  </td></tr>
      </table>>;];
   
   edge [tailclip = "false";];
   fut1:source:c -> fut1:target [dir = forward;];
}

================================================
FILE: dot/trpl17-05.dot
================================================
digraph {
   rankdir = RL;
   overlap = false;
   dpi = 300.0;
   splines = false;
   cluster = true;
   
   node [shape = "plaintext";];
   
   // Group the two together, which results in the desired alignment.
   subgraph {
      // But don't show the frame!
      style = "invis";
      
      fut1 [label = <<table border="0" cellborder="1" cellspacing="0" bgcolor="gray">
         <tr><td sides="B">fut1</td></tr>
         <tr><td>?</td></tr>
         <tr><td port="target">?</td></tr>
         <tr><td>?</td></tr>
         </table>>;];
      
      fut2 [label = <<table border="0" cellborder="1" cellspacing="0">
         <tr><td sides="B">fut2</td></tr>
         <tr><td>0</td></tr>
         <tr><td>1</td></tr>
         <tr><td port="source"> </td></tr>
         </table>>;];
      
      edge [tailclip = "false"; dir = forward];
      fut2:source:c -> fut1:target:e;
   }
}

================================================
FILE: dot/trpl17-06.dot
================================================
digraph {
   rankdir = LR;
   dpi = 300.0;
   
   node [shape = "plaintext";];
   
   pinned_box [label = <<table border="0" cellborder="1" cellspacing="0">
      <tr><td sides="B">Pin</td></tr>
      <tr><td port="source"> </td></tr>
      </table>>;];
   
   subgraph cluster_box {
      label = "";
      peripheries = 0;
      
      subgraph cluster_box_internal {
         peripheries = 1;
         label = "b1";
         shape = box;
         style = solid;
         pin [shape = "point";];
      }
   }
   
   subgraph cluster_deref {
      style = bold;
      label = "pinned";
      
      box [label = <<table border="0" cellborder="1" cellspacing="0">
         <tr><td sides="B">fut</td></tr>
         <tr><td port="target">0</td></tr>
         <tr><td port="source"> </td></tr>
         <tr><td style="dashed">...</td></tr>
         <tr><td port="internal">1</td></tr>
         </table>>;];
   }
   
   edge [tailclip = false;];
   pinned_box -> pin [tailport = "source:c"; arrowhead = "none";];
   pin -> box [headport = "target";];
   box -> box [tailport = "source:c"; headport = "internal";];
}

================================================
FILE: dot/trpl17-07.dot
================================================
digraph {
   rankdir = LR;
   newrank = true;
   dpi = 300.0;
   
   node [shape = "plaintext";];
   
   
   subgraph cluster_not_fut {
      peripheries = 0;
      
      pin [label = <<table border="0" cellborder="1" cellspacing="0">
         <tr><td sides="B">Pin</td></tr>
         <tr><td port="source"> </td></tr>
         </table>>;];
      
      subgraph cluster_boxes {
         peripheries = 0;
         rank = same;
         
         subgraph cluster_box_1 {
            subgraph cluster_box_2_internal {
               label = "b1";
               shape = box;
               style = solid;
               style = filled;
               peripheries = 1;
               box1 [shape = "point";style = "invis";];
            }
         }
         
         subgraph cluster_box_2 {
            subgraph cluster_box_2_internal {
               label = "b2";
               shape = box;
               style = solid;
               peripheries = 1;
               box2 [shape = "point";];
            }
         }
      }
   }
   subgraph cluster_target {
      style = bold;
      label = "pinned";
      
      fut [label = <<table border="0" cellborder="1" cellspacing="0">
         <tr><td sides="B">fut</td></tr>
         <tr><td port="target">0</td></tr>
         <tr><td port="source"> </td></tr>
         <tr><td style="dashed">...</td></tr>
         <tr><td port="internal">1</td></tr>
         </table>>;];
   }
   
   
   box1 -> box2 [rankdir = TB; style = invis;];
   
   edge [tailclip = false;];
   pin -> box1 [style = "invis";];
   pin -> box2 [tailport = "source:c"; arrowhead = "none";];
   box2 -> fut [headport = "target";];
   fut -> fut [tailport = "source:c"; headport = "internal";];
}

================================================
FILE: dot/trpl17-08.dot
================================================
digraph {
   rankdir = LR;
   overlap = false;
   dpi = 300.0;
   splines = false;
   cluster = true;
   newrank = true;
   outputorder = in;
   compound = true;
   labelloc = "c";
   
   node [shape = "plaintext";];
   
   pinned_box [label = <<table border="0" cellborder="1" cellspacing="0">
      <tr><td sides="B">Pin</td></tr>
      <tr><td port="source"> </td></tr>
      </table>>;];
   
   
   subgraph cluster_deref {
      style = dashed;
      label = "String";
      
      pin [shape = "point";];
      
      fut [label = <<table border="0" cellborder="1" cellspacing="0">
         <tr><td port="target">5usize</td>
         <td>h</td>
         <td>e</td>
         <td>l</td>
         <td>l</td>
         <td>o</td></tr>
         </table>>;];
   }
   
   edge [tailclip = false;];
   pinned_box -> pin [tailport = "source:c"; arrowhead = "none";];
   pin -> fut [headport = "target";];
}

================================================
FILE: dot/trpl17-09.dot
================================================
digraph {
   rankdir = LR;
   overlap = false;
   dpi = 300.0;
   splines = false;
   cluster = true;
   newrank = true;
   outputorder = in;
   compound = true;
   labelloc = "c";
   
   node [shape = "plaintext";];
   
   pinned_box [label = <<table border="0" cellborder="1" cellspacing="0">
      <tr><td sides="B">Pin</td></tr>
      <tr><td port="source"> </td></tr>
      </table>>;];
   
   subgraph cluster_both {
      peripheries = 0;
      
      
      
      string1 [label = <<table border="0" cellborder="1" cellspacing="0" bgcolor="lightgray">
         <tr><td colspan="8" sides="B">s1</td></tr>
         <tr>
         <td port="target">5usize</td>
         <td>h</td>
         <td>e</td>
         <td>l</td>
         <td>l</td>
         <td>o</td>
         </tr>
         </table>>;];
      
      subgraph cluster_deref {
         style = dashed;
         label = "String";
         peripheries = 1;
         
         pin [shape = "point";];
         
         string2 [label = <<table border="0" cellborder="1" cellspacing="0">
            <tr><td colspan="8" sides="B">s2</td></tr>
            <tr>
            <td port="target">7usize</td>
            <td>g</td>
            <td>o</td>
            <td>o</td>
            <td>d</td>
            <td>b</td>
            <td>y</td>
            <td>e</td>
            </tr>
            </table>>;];
      }
   }
   
   edge [tailclip = false;];
   pinned_box -> pin [tailport = "source:c"; arrowhead = "none";];
   pin -> string2 [headport = "target";];
}

================================================
FILE: dprint.jsonc
================================================
{
  "typescript": {
  },
  "json": {
  },
  "markdown": {
  },
  "malva": {
  },
  "excludes": [
    "**/node_modules",
    "**/*-lock.json",
    "**/target",
    // We don’t to apply auto-formatting to this *yet*, at a minimum. It may be
    // helpful as a way of replacing some of the manual formatting we do in both
    // the nostarch script and the script for pulling data back over from docx,
    // though, so we may *start* doing so in the future.
    "nostarch",
    // These should never change at this point
    "2018-edition",
    "first-edition",
    "second-edition",
    "redirects",
    // has empty list items which look like headings to a formatter
    ".github/ISSUE_TEMPLATE/bug_report.md",
  ],
  "plugins": [
    "https://plugins.dprint.dev/typescript-0.93.3.wasm",
    "https://plugins.dprint.dev/json-0.19.4.wasm",
    "https://plugins.dprint.dev/markdown-0.17.8.wasm",
    "https://plugins.dprint.dev/g-plane/malva-v0.11.0.wasm",
  ],
}


================================================
FILE: ferris.css
================================================
body.light .does_not_compile,
body.light .panics,
body.light .not_desired_behavior,
body.rust .does_not_compile,
body.rust .panics,
body.rust .not_desired_behavior {
  background: #fff1f1;
}

body.coal .does_not_compile,
body.coal .panics,
body.coal .not_desired_behavior,
body.navy .does_not_compile,
body.navy .panics,
body.navy .not_desired_behavior,
body.ayu .does_not_compile,
body.ayu .panics,
body.ayu .not_desired_behavior {
  background: #501f21;
}

.ferris-container {
  position: absolute;
  z-index: 99;
  right: 5px;
  top: 30px;
}

.ferris {
  vertical-align: top;
  margin-left: 0.2em;
  height: auto;
}

.ferris-large {
  width: 4.5em;
}

.ferris-small {
  width: 2.3em;
}

.ferris-explain {
  width: 100px;
}

/*
  A bit of a hack to make small Ferris use the existing buttons container but
  only show/hide the buttons on hover over the `pre`. Targeting `.listing`
  increases the specificity of this rule.
*/
pre > .buttons {
  visibility: visible;
  opacity: 1;
  transition: none;
}

pre > .buttons button {
  visibility: hidden;
  opacity: 0;
  transition: visibility 0.1s linear, opacity 0.1s linear;
}

pre:hover > .buttons button {
  visibility: visible;
  opacity: 1;
}


================================================
FILE: ferris.js
================================================
// @ts-check

/**
 * @typedef {{ attr: string, title: string }} FerrisType
 */

/** @type {Array<FerrisType>} */
const FERRIS_TYPES = [
  {
    attr: "does_not_compile",
    title: "This code does not compile!",
  },
  {
    attr: "panics",
    title: "This code panics!",
  },
  {
    attr: "not_desired_behavior",
    title: "This code does not produce the desired behavior.",
  },
];

document.addEventListener("DOMContentLoaded", () => {
  for (let ferrisType of FERRIS_TYPES) {
    attachFerrises(ferrisType);
  }
});

/**
 * @param {FerrisType} type
 */
function attachFerrises(type) {
  let elements = document.getElementsByClassName(type.attr);

  for (let codeBlock of elements) {
    // Skip SVG etc.: in principle, these should never be attached to those, but
    // this means if someone happens to have a browser extension which *is*
    // attaching them, it will not break the code.
    if (!(codeBlock instanceof HTMLElement)) {
      continue;
    }

    let codeLines = codeBlock.innerText;
    let extra = codeLines.endsWith("\n") ? 1 : 0;
    let numLines = codeLines.split("\n").length - extra;

    /** @type {'small' | 'large'} */
    let size = numLines < 4 ? "small" : "large";

    let container = prepareFerrisContainer(codeBlock, size == "small");
    if (!container) {
      continue;
    }

    container.appendChild(createFerris(type, size));
  }
}

/**
 * @param {HTMLElement} element - Code block element to attach a Ferris to.
 * @param {boolean} useButtons - Whether to attach to existing buttons.
 * @returns {Element | null} - The container element to use.
 */
function prepareFerrisContainer(element, useButtons) {
  let foundButtons = element.parentElement?.querySelector(".buttons");
  if (useButtons && foundButtons) {
    return foundButtons;
  }

  let div = document.createElement("div");
  div.classList.add("ferris-container");

  if (!element.parentElement) {
    console.error(`Could not install Ferris on ${element}, which is missing a parent`);
    return null;
  }

  element.parentElement.insertBefore(div, element);

  return div;
}

/**
 * @param {FerrisType} type
 * @param {'small' | 'large'} size
 * @returns {HTMLAnchorElement} - The generated anchor element.
 */
function createFerris(type, size) {
  let a = document.createElement("a");
  a.setAttribute("href", "ch00-00-introduction.html#ferris");
  a.setAttribute("target", "_blank");

  let img = document.createElement("img");
  img.setAttribute("src", "img/ferris/" + type.attr + ".svg");
  img.setAttribute("title", type.title);
  img.classList.add("ferris");
  img.classList.add("ferris-" + size);

  a.appendChild(img);

  return a;
}


================================================
FILE: first-edition/book.toml
================================================
[book]
title = "The Rust Programming Language"
authors = ["The Rust Project Developers"]


================================================
FILE: first-edition/src/README.md
================================================
# The Rust Programming Language

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/README.html).

================================================
FILE: first-edition/src/SUMMARY.md
================================================
# Summary

[Introduction](README.md)

* [Getting Started](getting-started.md)
* [Tutorial: Guessing Game](guessing-game.md)
* [Syntax and Semantics](syntax-and-semantics.md)
    * [Variable Bindings](variable-bindings.md)
    * [Functions](functions.md)
    * [Primitive Types](primitive-types.md)
    * [Comments](comments.md)
    * [if](if.md)
    * [Loops](loops.md)
    * [Vectors](vectors.md)
    * [Ownership](ownership.md)
    * [References and Borrowing](references-and-borrowing.md)
    * [Lifetimes](lifetimes.md)
    * [Mutability](mutability.md)
    * [Structs](structs.md)
    * [Enums](enums.md)
    * [Match](match.md)
    * [Patterns](patterns.md)
    * [Method Syntax](method-syntax.md)
    * [Strings](strings.md)
    * [Generics](generics.md)
    * [Traits](traits.md)
    * [Drop](drop.md)
    * [if let](if-let.md)
    * [Trait Objects](trait-objects.md)
    * [Closures](closures.md)
    * [Universal Function Call Syntax](ufcs.md)
    * [Crates and Modules](crates-and-modules.md)
    * [`const` and `static`](const-and-static.md)
    * [Attributes](attributes.md)
    * [`type` aliases](type-aliases.md)
    * [Casting between types](casting-between-types.md)
    * [Associated Types](associated-types.md)
    * [Unsized Types](unsized-types.md)
    * [Operators and Overloading](operators-and-overloading.md)
    * [Deref coercions](deref-coercions.md)
    * [Macros](macros.md)
    * [Raw Pointers](raw-pointers.md)
    * [`unsafe`](unsafe.md)
* [Effective Rust](effective-rust.md)
    * [The Stack and the Heap](the-stack-and-the-heap.md)
    * [Testing](testing.md)
    * [Conditional Compilation](conditional-compilation.md)
    * [Documentation](documentation.md)
    * [Iterators](iterators.md)
    * [Concurrency](concurrency.md)
    * [Error Handling](error-handling.md)
    * [Choosing your Guarantees](choosing-your-guarantees.md)
    * [FFI](ffi.md)
    * [Borrow and AsRef](borrow-and-asref.md)
    * [Release Channels](release-channels.md)
    * [Using Rust without the standard library](using-rust-without-the-standard-library.md)
    * [Procedural Macros (and custom derive)](procedural-macros.md)
* [Glossary](glossary.md)
* [Syntax Index](syntax-index.md)
* [Bibliography](bibliography.md)


================================================
FILE: first-edition/src/associated-types.md
================================================
# Associated Types

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-02-advanced-traits.html#specifying-placeholder-types-in-trait-definitions-with-associated-types) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/associated-types.html).


================================================
FILE: first-edition/src/attributes.md
================================================
# Attributes

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/attributes.html).

================================================
FILE: first-edition/src/bibliography.md
================================================
# Bibliography

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/bibliography.html).

================================================
FILE: first-edition/src/borrow-and-asref.md
================================================
# Borrow and AsRef

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch15-00-smart-pointers.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/borrow-and-asref.html).


================================================
FILE: first-edition/src/casting-between-types.md
================================================
# Casting Between Types

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/casting-between-types.html).

================================================
FILE: first-edition/src/choosing-your-guarantees.md
================================================
# Choosing your Guarantees

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch15-00-smart-pointers.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/choosing-your-guarantees.html).


================================================
FILE: first-edition/src/closures.md
================================================
# Closures

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch13-01-closures.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/closures.html).


================================================
FILE: first-edition/src/comments.md
================================================
# Comments

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch03-04-comments.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/comments.html).


================================================
FILE: first-edition/src/concurrency.md
================================================
# Concurrency

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch16-00-concurrency.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/concurrency.html).


================================================
FILE: first-edition/src/conditional-compilation.md
================================================
# Conditional Compilation

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/conditional-compilation.html).


================================================
FILE: first-edition/src/const-and-static.md
================================================
# const and static

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-01-unsafe-rust.html#accessing-or-modifying-a-mutable-static-variable) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/const-and-static.html).


================================================
FILE: first-edition/src/crates-and-modules.md
================================================
# Crates and Modules

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch07-00-managing-growing-projects-with-packages-crates-and-modules.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/crates-and-modules.html).


================================================
FILE: first-edition/src/deref-coercions.md
================================================
# `Deref` coercions

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch15-02-deref.html#implicit-deref-coercions-with-functions-and-methods) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/deref-coercions.html).


================================================
FILE: first-edition/src/documentation.md
================================================
# Documentation

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch14-02-publishing-to-crates-io.html#making-useful-documentation-comments) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/documentation.html).


================================================
FILE: first-edition/src/drop.md
================================================
# Drop

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch15-03-drop.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/drop.html).


================================================
FILE: first-edition/src/effective-rust.md
================================================
# Effective Rust

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/effective-rust.html).

================================================
FILE: first-edition/src/enums.md
================================================
# Enums

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch06-01-defining-an-enum.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/enums.html).


================================================
FILE: first-edition/src/error-handling.md
================================================
# Error Handling

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch09-00-error-handling.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/error-handling.html).

================================================
FILE: first-edition/src/ffi.md
================================================
# Foreign Function Interface

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-01-unsafe-rust.html#calling-rust-functions-from-other-languages) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/ffi.html).


================================================
FILE: first-edition/src/functions.md
================================================
# Functions

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch03-03-how-functions-work.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/functions.html).


================================================
FILE: first-edition/src/generics.md
================================================
# Generics

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch10-00-generics.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/generics.html).


================================================
FILE: first-edition/src/getting-started.md
================================================
# Getting Started

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch00-00-introduction.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/getting-started.html).


================================================
FILE: first-edition/src/glossary.md
================================================
# Glossary

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/glossary.html).

================================================
FILE: first-edition/src/guessing-game.md
================================================
# Guessing Game

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch02-00-guessing-game-tutorial.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/guessing-game.html).


================================================
FILE: first-edition/src/if-let.md
================================================
# if let

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch06-03-if-let.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/if-let.html).


================================================
FILE: first-edition/src/if.md
================================================
# if

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch03-05-control-flow.html#if-expressions) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/if.html).


================================================
FILE: first-edition/src/iterators.md
================================================
# Iterators

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch13-02-iterators.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/iterators.html).


================================================
FILE: first-edition/src/lifetimes.md
================================================
# Lifetimes

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch10-03-lifetime-syntax.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/lifetimes.html).


================================================
FILE: first-edition/src/loops.md
================================================
# Loops

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch03-05-control-flow.html#repetition-with-loops) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/loops.html).


================================================
FILE: first-edition/src/macros.md
================================================
# Macros

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-05-macros.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/macros.html).


================================================
FILE: first-edition/src/match.md
================================================
# Match

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch06-02-match.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/match.html).


================================================
FILE: first-edition/src/method-syntax.md
================================================
# Method Syntax

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch05-03-method-syntax.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/method-syntax.html).


================================================
FILE: first-edition/src/mutability.md
================================================
# Mutability

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch03-01-variables-and-mutability.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/mutability.html).


================================================
FILE: first-edition/src/operators-and-overloading.md
================================================
# Operators and Overloading

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-02-advanced-traits.html#default-generic-type-parameters-and-operator-overloading) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/operators-and-overloading.html).


================================================
FILE: first-edition/src/ownership.md
================================================
# Ownership

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch04-00-understanding-ownership.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/ownership.html).


================================================
FILE: first-edition/src/patterns.md
================================================
# Patterns

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch19-03-pattern-syntax.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/patterns.html).


================================================
FILE: first-edition/src/primitive-types.md
================================================
# Primitive Types

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch03-02-data-types.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/primitive-types.html).


================================================
FILE: first-edition/src/procedural-macros.md
================================================
# Procedural Macros (and custom Derive)

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-05-macros.html?highlight=procedural#procedural-macros-for-generating-code-from-attributes) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/procedural-macros.html).


================================================
FILE: first-edition/src/raw-pointers.md
================================================
# Raw Pointers

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-01-unsafe-rust.html#dereferencing-a-raw-pointer) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/raw-pointers.html).


================================================
FILE: first-edition/src/references-and-borrowing.md
================================================
# References and Borrowing

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch04-02-references-and-borrowing.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/references-and-borrowing.html).


================================================
FILE: first-edition/src/release-channels.md
================================================
# Release Channels

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/release-channels.html).

================================================
FILE: first-edition/src/strings.md
================================================
# Strings

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch08-02-strings.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/strings.html).


================================================
FILE: first-edition/src/structs.md
================================================
# Structs

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch05-00-structs.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/structs.html).


================================================
FILE: first-edition/src/syntax-and-semantics.md
================================================
# Syntax and Semantics

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch03-00-common-programming-concepts.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/syntax-and-semantics.html).


================================================
FILE: first-edition/src/syntax-index.md
================================================
# Syntax Index

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/syntax-index.html).

================================================
FILE: first-edition/src/testing.md
================================================
# Testing

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch11-00-testing.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/testing.html).


================================================
FILE: first-edition/src/the-stack-and-the-heap.md
================================================
# The Stack and the Heap

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch04-01-what-is-ownership.html#the-stack-and-the-heap) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/the-stack-and-the-heap.html).


================================================
FILE: first-edition/src/trait-objects.md
================================================
# Trait Objects

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch18-02-trait-objects.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/trait-objects.html).


================================================
FILE: first-edition/src/traits.md
================================================
# Traits

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch10-02-traits.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/traits.html).


================================================
FILE: first-edition/src/type-aliases.md
================================================
# Type Aliases

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-03-advanced-types.html#creating-type-synonyms-with-type-aliases) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/type-aliases.html).


================================================
FILE: first-edition/src/ufcs.md
================================================
# Universal Function Call Syntax

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/ufcs.html).

================================================
FILE: first-edition/src/unsafe.md
================================================
# Unsafe

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-01-unsafe-rust.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/unsafe.html).


================================================
FILE: first-edition/src/unsized-types.md
================================================
# Unsized Types

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch20-03-advanced-types.html#dynamically-sized-types-and-the-sized-trait) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/unsized-types.html).


================================================
FILE: first-edition/src/using-rust-without-the-standard-library.md
================================================
# Using Rust Without the Standard Library

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/using-rust-without-the-standard-library.html).

================================================
FILE: first-edition/src/variable-bindings.md
================================================
# Variable Bindings

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../index.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/variable-bindings.html).

================================================
FILE: first-edition/src/vectors.md
================================================
# Vectors

The first edition of the book is no longer distributed with Rust's documentation.

If you came here via a link or web search, you may want to check out [the current
version of the book](../ch08-01-vectors.html) instead.

If you have an internet connection, you can [find a copy distributed with
Rust
1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/vectors.html).


================================================
FILE: listings/ch02-guessing-game-tutorial/listing-02-01/Cargo.toml
================================================
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2024"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]


================================================
FILE: listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs
================================================
// ANCHOR: all
// ANCHOR: io
use std::io;
// ANCHOR_END: io

// ANCHOR: main
fn main() {
    // ANCHOR_END: main
    // ANCHOR: print
    println!("Guess the number!");

    println!("Please input your guess.");
    // ANCHOR_END: print

    // ANCHOR: string
    let mut guess = String::new();
    // ANCHOR_END: string

    // ANCHOR: read
    io::stdin()
        .read_line(&mut guess)
        // ANCHOR_END: read
        // ANCHOR: expect
        .expect("Failed to read line");
    // ANCHOR_END: expect

    // ANCHOR: print_guess
    println!("You guessed: {guess}");
    // ANCHOR_END: print_guess
}
// ANCHOR: all


================================================
FILE: listings/ch02-guessing-game-tutorial/listing-02-02/Cargo.toml
================================================
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2024"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rand = "0.8.5"


================================================
FILE: listings/ch02-guessing-game-tutorial/listing-02-02/src/main.rs
================================================
use std::io;

fn main() {
    println!("Guess the number!");

    println!("Please input your guess.");

    let mut guess = String::new();

    io::stdin()
        .read_line(&mut guess)
        .expect("Failed to read line");

    println!("You guessed: {guess}");
}


================================================
FILE: listings/ch02-guessing-game-tutorial/listing-02-03/Cargo.toml
================================================
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2024"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rand = "0.8.5"


================================================
FILE: listings/ch02-guessing-game-tutorial/listing-02-03/src/main.rs
================================================
// ANCHOR: all
use std::io;

// ANCHOR: ch07-04
use rand::Rng;

fn main() {
    // ANCHOR_END: ch07-04
    println!("Guess the number!");

    // ANCHOR: ch07-04
    let secret_number = rand::thread_rng().gen_range(1..=100);
    // ANCHOR_END: ch07-04

    println!("The secret number is: {secret_number}");

    println!("Please input your guess.");

    let mut guess = String::new();

    io::stdin()
        .read_line(&mut guess)
        .expect("Failed to read line");

    println!("You guessed: {guess}");
    // ANCHOR: ch07-04
}
// ANCHOR_END: ch07-04
// ANCHOR_END: all


================================================
FILE: listings/ch02-guessing-game-tutorial/listing-02-04/Cargo.toml
================================================
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2024"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rand = "0.8.5"


================================================
FILE: listings/ch02-guessing-game-tutorial/listing-02-04/output.txt
================================================
$ cargo build
   Compiling libc v0.2.86
   Compiling getrandom v0.2.2
   Compiling cfg-if v1.0.0
   Compiling ppv-lite86 v0.2.10
   Compiling rand_core v0.6.2
   Compiling rand_chacha v0.3.0
   Compiling rand v0.8.5
   Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
error[E0308]: mismatched types
  --> src/main.rs:23:21
   |
23 |     match guess.cmp(&secret_number) {
   |                 --- ^^^^^^^^^^^^^^ expected `&String`, found `&{integer}`
   |                 |
   |                 arguments to this method are incorrect
   |
   = note: expected reference `&String`
              found reference `&{integer}`
note: method defined here
  --> /rustc/1159e78c4747b02ef996e55082b704c09b970588/library/core/src/cmp.rs:979:8

For more information about this error, try `rustc --explain E0308`.
error: could not compile `guessing_game` (bin "guessing_game") due to 1 previous error


================================================
FILE: listings/ch02-guessing-game-tutorial/listing-02-04/src/main.rs
================================================
// ANCHOR: here
use std::cmp::Ordering;
use std::io;

use rand::Rng;

fn main() {
    // --snip--
    // ANCHOR_END: here
    println!("Guess the number!");

    let secret_number = rand::thread_rng().gen_range(1..=100);

    println!("The secret number is: {secret_number}");

    println!("Please input your guess.");

    let mut guess = String::new();

    io::stdin()
        .read_line(&mut guess)
        .expect("Failed to read line");
    // ANCHOR: here

    println!("You guessed: {guess}");

    match guess.cmp(&secret_number) {
        Ordering::Less => println!("Too small!"),
        Ordering::Greater => println!("Too big!"),
        Ordering::Equal => println!("You win!"),
    }
}
// ANCHOR_END: here


================================================
FILE: listings/ch02-guessing-game-tutorial/listing-02-05/Cargo.toml
================================================
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2024"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rand = "0.8.5"


================================================
FILE: listings/ch02-guessing-game-tutorial/listing-02-05/src/main.rs
================================================
use std::cmp::Ordering;
use std::io;

use rand::Rng;

fn main() {
    println!("Guess the number!");

    let secret_number = rand::thread_rng().gen_range(1..=100);

    println!("The secret number is: {secret_number}");

    loop {
        println!("Please input your guess.");

        let mut guess = String::new();

        // ANCHOR: here
        // --snip--

        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");

        // ANCHOR: ch19
        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue,
        };
        // ANCHOR_END: ch19

        println!("You guessed: {guess}");

        // --snip--
        // ANCHOR_END: here

        match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => {
                println!("You win!");
                break;
            }
        }
    }
}


================================================
FILE: listings/ch02-guessing-game-tutorial/listing-02-06/Cargo.toml
================================================
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2024"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rand = "0.8.5"


================================================
FILE: listings/ch02-guessing-game-tutorial/listing-02-06/src/main.rs
================================================
use std::cmp::Ordering;
use std::io;

use rand::Rng;

fn main() {
    println!("Guess the number!");

    let secret_number = rand::thread_rng().gen_range(1..=100);

    loop {
        println!("Please input your guess.");

        let mut guess = String::new();

        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");

        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue,
        };

        println!("You guessed: {guess}");

        match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => {
                println!("You win!");
                break;
            }
        }
    }
}


================================================
FILE: listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/Cargo.toml
================================================
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2024"

[dependencies]


================================================
FILE: listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/output.txt
================================================
$ cargo run
   Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.08s
     Running `target/debug/guessing_game`
Hello, world!


================================================
FILE: listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/src/main.rs
================================================
fn main() {
    println!("Hello, world!");
}


================================================
FILE: listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/Cargo.toml
================================================
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2024"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]


================================================
FILE: listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/output.txt
================================================
$ cargo build
   Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
warning: unused `Result` that must be used
  --> src/main.rs:10:5
   |
10 |     io::stdin().read_line(&mut guess);
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: this `Result` may be an `Err` variant, which should be handled
   = note: `#[warn(unused_must_use)]` on by default
help: use `let _ = ...` to ignore the resulting value
   |
10 |     let _ = io::stdin().read_line(&mut guess);
   |     +++++++

warning: `guessing_game` (bin "guessing_game") generated 1 warning
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.59s


================================================
FILE: listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/src/main.rs
================================================
use std::io;

fn main() {
    println!("Guess the number!");

    println!("Please input your guess.");

    let mut guess = String::new();

    io::stdin().read_line(&mut guess);

    println!("You guessed: {guess}");
}


================================================
FILE: listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/Cargo.toml
================================================
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2024"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rand = "0.8.5"


================================================
FILE: listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/src/main.rs
================================================
use std::cmp::Ordering;
use std::io;

use rand::Rng;

fn main() {
    println!("Guess the number!");

    let secret_number = rand::thread_rng().gen_range(1..=100);

    println!("The secret number is: {secret_number}");

    println!("Please input your guess.");

    // ANCHOR: here
    // --snip--

    let mut guess = String::new();

    io::stdin()
        .read_line(&mut guess)
        .expect("Failed to read line");

    let guess: u32 = guess.trim().parse().expect("Please type a number!");

    println!("You guessed: {guess}");

    match guess.cmp(&secret_number) {
        Ordering::Less => println!("Too small!"),
        Ordering::Gr
Download .txt
gitextract_tbjns9bv/

├── .cargo/
│   └── config.toml
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── new_translation.md
│   └── workflows/
│       └── main.yml
├── .gitignore
├── 2018-edition/
│   ├── book.toml
│   ├── dot/
│   │   ├── trpl04-01.dot
│   │   ├── trpl04-02.dot
│   │   ├── trpl04-03.dot
│   │   ├── trpl04-04.dot
│   │   ├── trpl04-05.dot
│   │   ├── trpl04-06.dot
│   │   ├── trpl15-01.dot
│   │   ├── trpl15-02.dot
│   │   └── trpl15-03.dot
│   ├── ferris.css
│   ├── ferris.js
│   └── src/
│       ├── SUMMARY.md
│       ├── appendix-00.md
│       ├── appendix-01-keywords.md
│       ├── appendix-02-operators.md
│       ├── appendix-03-derivable-traits.md
│       ├── appendix-04-useful-development-tools.md
│       ├── appendix-05-editions.md
│       ├── appendix-06-translation.md
│       ├── appendix-07-nightly-rust.md
│       ├── ch00-00-introduction.md
│       ├── ch01-00-getting-started.md
│       ├── ch01-01-installation.md
│       ├── ch01-02-hello-world.md
│       ├── ch01-03-hello-cargo.md
│       ├── ch02-00-guessing-game-tutorial.md
│       ├── ch03-00-common-programming-concepts.md
│       ├── ch03-01-variables-and-mutability.md
│       ├── ch03-02-data-types.md
│       ├── ch03-03-how-functions-work.md
│       ├── ch03-04-comments.md
│       ├── ch03-05-control-flow.md
│       ├── ch04-00-understanding-ownership.md
│       ├── ch04-01-what-is-ownership.md
│       ├── ch04-02-references-and-borrowing.md
│       ├── ch04-03-slices.md
│       ├── ch05-00-structs.md
│       ├── ch05-01-defining-structs.md
│       ├── ch05-02-example-structs.md
│       ├── ch05-03-method-syntax.md
│       ├── ch06-00-enums.md
│       ├── ch06-01-defining-an-enum.md
│       ├── ch06-02-match.md
│       ├── ch06-03-if-let.md
│       ├── ch07-00-packages-crates-and-modules.md
│       ├── ch07-01-packages-and-crates-for-making-libraries-and-executables.md
│       ├── ch07-02-modules-and-use-to-control-scope-and-privacy.md
│       ├── ch08-00-common-collections.md
│       ├── ch08-01-vectors.md
│       ├── ch08-02-strings.md
│       ├── ch08-03-hash-maps.md
│       ├── ch09-00-error-handling.md
│       ├── ch09-01-unrecoverable-errors-with-panic.md
│       ├── ch09-02-recoverable-errors-with-result.md
│       ├── ch09-03-to-panic-or-not-to-panic.md
│       ├── ch10-00-generics.md
│       ├── ch10-01-syntax.md
│       ├── ch10-02-traits.md
│       ├── ch10-03-lifetime-syntax.md
│       ├── ch11-00-testing.md
│       ├── ch11-01-writing-tests.md
│       ├── ch11-02-running-tests.md
│       ├── ch11-03-test-organization.md
│       ├── ch12-00-an-io-project.md
│       ├── ch12-01-accepting-command-line-arguments.md
│       ├── ch12-02-reading-a-file.md
│       ├── ch12-03-improving-error-handling-and-modularity.md
│       ├── ch12-04-testing-the-librarys-functionality.md
│       ├── ch12-05-working-with-environment-variables.md
│       ├── ch12-06-writing-to-stderr-instead-of-stdout.md
│       ├── ch13-00-functional-features.md
│       ├── ch13-01-closures.md
│       ├── ch13-02-iterators.md
│       ├── ch13-03-improving-our-io-project.md
│       ├── ch13-04-performance.md
│       ├── ch14-00-more-about-cargo.md
│       ├── ch14-01-release-profiles.md
│       ├── ch14-02-publishing-to-crates-io.md
│       ├── ch14-03-cargo-workspaces.md
│       ├── ch14-04-installing-binaries.md
│       ├── ch14-05-extending-cargo.md
│       ├── ch15-00-smart-pointers.md
│       ├── ch15-01-box.md
│       ├── ch15-02-deref.md
│       ├── ch15-03-drop.md
│       ├── ch15-04-rc.md
│       ├── ch15-05-interior-mutability.md
│       ├── ch15-06-reference-cycles.md
│       ├── ch16-00-concurrency.md
│       ├── ch16-01-threads.md
│       ├── ch16-02-message-passing.md
│       ├── ch16-03-shared-state.md
│       ├── ch16-04-extensible-concurrency-sync-and-send.md
│       ├── ch17-00-oop.md
│       ├── ch17-01-what-is-oo.md
│       ├── ch17-02-trait-objects.md
│       ├── ch17-03-oo-design-patterns.md
│       ├── ch18-00-patterns.md
│       ├── ch18-01-all-the-places-for-patterns.md
│       ├── ch18-02-refutability.md
│       ├── ch18-03-pattern-syntax.md
│       ├── ch19-00-advanced-features.md
│       ├── ch19-01-unsafe-rust.md
│       ├── ch19-02-advanced-lifetimes.md
│       ├── ch19-03-advanced-traits.md
│       ├── ch19-04-advanced-types.md
│       ├── ch19-05-advanced-functions-and-closures.md
│       ├── ch19-06-macros.md
│       ├── ch20-00-final-project-a-web-server.md
│       ├── ch20-01-single-threaded.md
│       ├── ch20-02-multithreaded.md
│       ├── ch20-03-graceful-shutdown-and-cleanup.md
│       └── foreword.md
├── ADMIN_TASKS.md
├── CONTRIBUTING.md
├── COPYRIGHT
├── Cargo.toml
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md
├── TODO.md
├── book.toml
├── ci/
│   ├── dictionary.txt
│   ├── spellcheck.sh
│   └── validate.sh
├── dot/
│   ├── trpl04-01.dot
│   ├── trpl04-02.dot
│   ├── trpl04-03.dot
│   ├── trpl04-04.dot
│   ├── trpl04-05.dot
│   ├── trpl04-06.dot
│   ├── trpl04-07.dot
│   ├── trpl15-01.dot
│   ├── trpl15-02.dot
│   ├── trpl15-03.dot
│   ├── trpl15-04.dot
│   ├── trpl17-01.dot
│   ├── trpl17-02.dot
│   ├── trpl17-03.dot
│   ├── trpl17-04.dot
│   ├── trpl17-05.dot
│   ├── trpl17-06.dot
│   ├── trpl17-07.dot
│   ├── trpl17-08.dot
│   └── trpl17-09.dot
├── dprint.jsonc
├── ferris.css
├── ferris.js
├── first-edition/
│   ├── book.toml
│   └── src/
│       ├── README.md
│       ├── SUMMARY.md
│       ├── associated-types.md
│       ├── attributes.md
│       ├── bibliography.md
│       ├── borrow-and-asref.md
│       ├── casting-between-types.md
│       ├── choosing-your-guarantees.md
│       ├── closures.md
│       ├── comments.md
│       ├── concurrency.md
│       ├── conditional-compilation.md
│       ├── const-and-static.md
│       ├── crates-and-modules.md
│       ├── deref-coercions.md
│       ├── documentation.md
│       ├── drop.md
│       ├── effective-rust.md
│       ├── enums.md
│       ├── error-handling.md
│       ├── ffi.md
│       ├── functions.md
│       ├── generics.md
│       ├── getting-started.md
│       ├── glossary.md
│       ├── guessing-game.md
│       ├── if-let.md
│       ├── if.md
│       ├── iterators.md
│       ├── lifetimes.md
│       ├── loops.md
│       ├── macros.md
│       ├── match.md
│       ├── method-syntax.md
│       ├── mutability.md
│       ├── operators-and-overloading.md
│       ├── ownership.md
│       ├── patterns.md
│       ├── primitive-types.md
│       ├── procedural-macros.md
│       ├── raw-pointers.md
│       ├── references-and-borrowing.md
│       ├── release-channels.md
│       ├── strings.md
│       ├── structs.md
│       ├── syntax-and-semantics.md
│       ├── syntax-index.md
│       ├── testing.md
│       ├── the-stack-and-the-heap.md
│       ├── trait-objects.md
│       ├── traits.md
│       ├── type-aliases.md
│       ├── ufcs.md
│       ├── unsafe.md
│       ├── unsized-types.md
│       ├── using-rust-without-the-standard-library.md
│       ├── variable-bindings.md
│       └── vectors.md
├── listings/
│   ├── ch02-guessing-game-tutorial/
│   │   ├── listing-02-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-02-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-02-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-02-04/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-02-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-02-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-cargo-new/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-without-expect/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-convert-string-to-number/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-looping/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── no-listing-05-quitting/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           └── main.rs
│   ├── ch03-common-programming-concepts/
│   │   ├── listing-03-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-03-02/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-03-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-03-04/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-03-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-variables-are-immutable/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-adding-mut/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-shadowing/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-shadowing-can-change-types/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-05-mut-cant-change-types/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-06-floating-point/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-07-numeric-operations/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-08-boolean/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-09-char/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-10-tuples/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-11-destructuring-tuples/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-12-tuple-indexing/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-13-arrays/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-14-array-indexing/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-15-invalid-array-access/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-16-functions/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-17-functions-with-parameters/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-18-functions-with-multiple-parameters/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-19-statements-vs-expressions/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-20-blocks-are-expressions/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-21-function-return-values/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-22-function-parameter-and-return/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-23-statements-dont-return-values/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-24-comments-end-of-line/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-25-comments-above-line/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-26-if-true/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-27-if-false/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-28-if-condition-must-be-bool/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-29-if-not-equal-0/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-30-else-if/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-31-arms-must-return-same-type/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-32-5-loop-labels/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-32-loop/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-33-return-value-from-loop/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-34-for-range/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── output-only-01-no-type-annotations/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   ├── ch04-understanding-ownership/
│   │   ├── listing-04-01/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-04/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-06/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-04-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-can-mutate-string/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-string-scope/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-string-move/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-cant-use-after-move/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04b-replacement-drop/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-05-clone/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-06-copy/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-07-reference/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-08-reference-with-annotations/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-09-fixes-listing-04-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-10-multiple-mut-not-allowed/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-11-muts-in-separate-scopes/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-12-immutable-and-mutable-not-allowed/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-13-reference-scope-ends/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-14-dangling-reference/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-15-dangling-reference-annotated/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-16-no-dangle/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-17-slice/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-18-first-word-slice/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── no-listing-19-slice-error/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   ├── ch05-using-structs-to-structure-related-data/
│   │   ├── listing-05-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-08/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-11/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-12/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-05-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-tuple-structs/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-reference-in-struct/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-associated-functions/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-unit-like-structs/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-05-dbg-macro/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-06-method-field-interaction/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── output-only-01-debug/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── output-only-02-pretty-debug/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   ├── ch06-enums-and-pattern-matching/
│   │   ├── listing-06-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-06-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-defining-enums/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-enum-with-data/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-variants-with-different-data/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-structs-similar-to-message-enum/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-05-methods-on-enums/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-06-option-examples/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-07-cant-use-option-directly/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-08-match-arm-multiple-lines/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-09-variable-in-pattern/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-10-non-exhaustive-match/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-12-if-let/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-13-count-and-announce-match/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-14-count-and-announce-if-let-else/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-15-binding-catchall/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-16-underscore-catchall/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── no-listing-17-underscore-unit/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           └── main.rs
│   ├── ch07-managing-growing-projects/
│   │   ├── listing-07-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-05/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-12/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-07-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-17/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-07-19/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-20/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-07-21-and-22/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── front_of_house.rs
│   │   │       └── lib.rs
│   │   ├── no-listing-01-use-std-unnested/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-extracting-hosting/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── front_of_house/
│   │   │       │   └── hosting.rs
│   │   │       ├── front_of_house.rs
│   │   │       └── lib.rs
│   │   └── quick-reference-example/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           ├── garden/
│   │           │   └── vegetables.rs
│   │           ├── garden.rs
│   │           └── main.rs
│   ├── ch08-common-collections/
│   │   ├── listing-08-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-06/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-17/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-19/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-20/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-21/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-22/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-23/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-24/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-08-25/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-concat-multiple-strings/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-format/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-iterate-over-hashmap/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── output-only-01-not-char-boundary/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   ├── ch09-error-handling/
│   │   ├── listing-09-01/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-04/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-10/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-09-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── guessing_game.rs
│   │   │       └── main.rs
│   │   ├── no-listing-01-panic/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-unwrap/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-05-expect/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-08-unwrap-that-cant-fail/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── no-listing-09-guess-out-of-range/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           └── main.rs
│   ├── ch10-generic-types-traits-and-lifetimes/
│   │   ├── listing-10-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-05/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-07/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-10-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-10-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-10-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-10-16/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-17/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-18/
│   │   │   ├── Cargo.toml
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-19/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-20/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-21/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-22/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-23/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-24/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-10-25/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-calling-trait-method/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── no-listing-02-calling-default-impl/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── no-listing-03-default-impl-calls-other-methods/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── no-listing-04-traits-as-parameters/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-05-returning-impl-trait/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-06-impl-trait-returns-one-type/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-07-where-clause/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-08-only-one-reference-with-lifetime/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-09-unrelated-lifetime/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-10-lifetimes-on-methods/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── no-listing-11-generics-traits-and-lifetimes/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           └── main.rs
│   ├── ch11-writing-automated-tests/
│   │   ├── listing-11-01/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-06/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-07/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-08/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-10/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-11/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-11-13/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── src/
│   │   │   │   └── lib.rs
│   │   │   └── tests/
│   │   │       └── integration_test.rs
│   │   ├── no-listing-01-changing-test-name/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-02-adding-another-rectangle-test/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-03-introducing-a-bug/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-04-bug-in-add-two/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-05-greeter/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-06-greeter-with-bug/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-07-custom-failure-message/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-08-guess-with-bug/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-09-guess-with-panic-msg-bug/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-10-result-in-tests/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-11-ignore-a-test/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-12-shared-test-code-problem/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── src/
│   │   │   │   └── lib.rs
│   │   │   └── tests/
│   │   │       ├── common.rs
│   │   │       └── integration_test.rs
│   │   ├── no-listing-13-fix-shared-test-code-problem/
│   │   │   ├── Cargo.toml
│   │   │   ├── src/
│   │   │   │   └── lib.rs
│   │   │   └── tests/
│   │   │       ├── common/
│   │   │       │   └── mod.rs
│   │   │       └── integration_test.rs
│   │   ├── output-only-01-show-output/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── output-only-02-single-test/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── output-only-03-multiple-tests/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── output-only-04-running-ignored/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   └── output-only-05-single-integration/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       ├── src/
│   │       │   └── lib.rs
│   │       └── tests/
│   │           └── integration_test.rs
│   ├── ch12-an-io-project/
│   │   ├── listing-12-01/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-02/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-04/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-05/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-06/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-07/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-08/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-09/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-10/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-11/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-12/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-12-13/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-14/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-15/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-16/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-17/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-18/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-19/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-20/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-21/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-22/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-23/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-24/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── no-listing-01-handling-errors-in-main/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-using-search-in-run/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── output-only-01-with-args/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── output-only-02-missing-lifetimes/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── output-only-03-multiple-matches/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   └── output-only-04-no-matches/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       ├── poem.txt
│   │       └── src/
│   │           ├── lib.rs
│   │           └── main.rs
│   ├── ch13-functional-features/
│   │   ├── listing-12-23-reproduced/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-12-24-reproduced/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-13-01/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-04/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-05/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-07/
│   │   │   ├── .rustfmt.toml
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-08/
│   │   │   ├── .rustfmt.toml
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-09/
│   │   │   ├── .rustfmt.toml
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-13-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-13-14/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-13-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-13-18/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-13-19/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-13-20/
│   │   │   ├── Cargo.toml
│   │   │   ├── poem.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   └── listing-13-22/
│   │       ├── Cargo.toml
│   │       ├── poem.txt
│   │       └── src/
│   │           ├── lib.rs
│   │           └── main.rs
│   ├── ch14-more-about-cargo/
│   │   ├── listing-14-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-14-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-14-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-14-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-14-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-14-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-14-07/
│   │   │   └── add/
│   │   │       ├── Cargo.toml
│   │   │       ├── add_one/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── adder/
│   │   │           ├── Cargo.toml
│   │   │           └── src/
│   │   │               └── main.rs
│   │   ├── no-listing-01-workspace/
│   │   │   └── add/
│   │   │       ├── Cargo.toml
│   │   │       └── rustfmt-ignore
│   │   ├── no-listing-02-workspace-with-two-crates/
│   │   │   └── add/
│   │   │       ├── Cargo.toml
│   │   │       ├── add_one/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── adder/
│   │   │           ├── Cargo.toml
│   │   │           └── src/
│   │   │               └── main.rs
│   │   ├── no-listing-03-workspace-with-external-dependency/
│   │   │   └── add/
│   │   │       ├── Cargo.toml
│   │   │       ├── add_one/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── adder/
│   │   │           ├── Cargo.toml
│   │   │           └── src/
│   │   │               └── main.rs
│   │   ├── no-listing-04-workspace-with-tests/
│   │   │   └── add/
│   │   │       ├── Cargo.toml
│   │   │       ├── add_one/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── adder/
│   │   │           ├── Cargo.toml
│   │   │           └── src/
│   │   │               └── main.rs
│   │   ├── output-only-01-adder-crate/
│   │   │   └── add/
│   │   │       ├── .gitignore
│   │   │       ├── Cargo.toml
│   │   │       └── rustfmt-ignore
│   │   ├── output-only-02-add-one/
│   │   │   └── add/
│   │   │       ├── Cargo.toml
│   │   │       ├── add_one/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── adder/
│   │   │           ├── Cargo.toml
│   │   │           └── src/
│   │   │               └── main.rs
│   │   └── output-only-03-use-rand/
│   │       └── add/
│   │           ├── Cargo.toml
│   │           ├── add_one/
│   │           │   ├── Cargo.toml
│   │           │   └── src/
│   │           │       └── lib.rs
│   │           └── adder/
│   │               ├── Cargo.toml
│   │               └── src/
│   │                   └── main.rs
│   ├── ch15-smart-pointers/
│   │   ├── listing-15-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-09/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-14/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-15/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-16/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-17/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-19/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-20/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-15-21/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-15-22/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-15-23/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-15-24/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-25/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-26/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-27/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-28/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-15-29/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-cant-borrow-immutable-as-mutable/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── output-only-01-comparing-to-reference/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   ├── ch16-fearless-concurrency/
│   │   ├── listing-16-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-03/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-09/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-13/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-14/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-16-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-join-too-early/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-no-loop-to-understand-error/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── output-only-01-move-drop/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   ├── ch17-async-await/
│   │   ├── listing-17-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-17/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-19/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-20/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-21/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-22/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-23/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-24/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-17-25/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-state-machine/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   └── no-listing-stream-ext/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── lib.rs
│   ├── ch18-oop/
│   │   ├── listing-18-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-05/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-10/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-18-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-17/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       ├── lib.rs
│   │   │       └── main.rs
│   │   ├── listing-18-19/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-18-20/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   └── listing-18-21/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           ├── lib.rs
│   │           └── main.rs
│   ├── ch19-patterns-and-matching/
│   │   ├── listing-19-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-02/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-05/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-07/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-08/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-10/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-17/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-19/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-20/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-21/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-22/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-23/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-24/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-25/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   ├── rustfmt-ignore
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-26/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-27/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-28/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-19-29/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-01-literals/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-multiple-patterns/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-ranges/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-ranges-of-char/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   └── no-listing-05-destructuring-structs-and-tuples/
│   │       ├── Cargo.toml
│   │       └── src/
│   │           └── main.rs
│   ├── ch20-advanced-features/
│   │   ├── listing-20-01/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-02/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-03/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-04/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-05/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-06/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-07/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-08/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-09/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-10/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-11/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-12/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-13/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-20-14/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-20-15/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-16/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-20-17/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-18/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-19/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-20/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-21/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-22/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-23/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-24/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-25/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-26/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-28/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-29/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-30/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-31/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-32/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-20-33/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-34/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-35/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── listing-20-37/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── listing-20-38/
│   │   │   └── hello_macro/
│   │   │       ├── Cargo.toml
│   │   │       └── src/
│   │   │           └── lib.rs
│   │   ├── listing-20-39/
│   │   │   ├── hello_macro/
│   │   │   │   ├── Cargo.toml
│   │   │   │   └── src/
│   │   │   │       └── lib.rs
│   │   │   └── pancakes/
│   │   │       ├── Cargo.toml
│   │   │       └── src/
│   │   │           └── main.rs
│   │   ├── listing-20-40/
│   │   │   └── hello_macro/
│   │   │       ├── Cargo.toml
│   │   │       ├── hello_macro_derive/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── src/
│   │   │           ├── lib.rs
│   │   │           └── main.rs
│   │   ├── listing-20-42/
│   │   │   └── hello_macro/
│   │   │       ├── Cargo.toml
│   │   │       ├── hello_macro_derive/
│   │   │       │   ├── Cargo.toml
│   │   │       │   └── src/
│   │   │       │       └── lib.rs
│   │   │       └── src/
│   │   │           ├── lib.rs
│   │   │           └── main.rs
│   │   ├── no-listing-01-unsafe-fn/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-02-impl-outlineprint-for-point/
│   │   │   ├── Cargo.toml
│   │   │   ├── output.txt
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-03-impl-display-for-point/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-04-kilometers-alias/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-05-write-trait/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-06-result-alias/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-07-never-type/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-08-match-arms-different-types/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-09-unwrap-definition/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-10-loop-returns-never/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-11-cant-create-str/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── main.rs
│   │   ├── no-listing-12-generic-fn-definition/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-13-generic-implicit-sized-bound/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-14-generic-maybe-sized/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-18-returns-closure/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   ├── no-listing-21-pancakes/
│   │   │   ├── hello_macro/
│   │   │   │   ├── Cargo.toml
│   │   │   │   ├── hello_macro_derive/
│   │   │   │   │   ├── Cargo.toml
│   │   │   │   │   └── src/
│   │   │   │   │       └── lib.rs
│   │   │   │   └── src/
│   │   │   │       ├── lib.rs
│   │   │   │       └── main.rs
│   │   │   └── pancakes/
│   │   │       ├── Cargo.toml
│   │   │       └── src/
│   │   │           └── main.rs
│   │   ├── no-listing-22-iterator-on-counter/
│   │   │   ├── Cargo.toml
│   │   │   └── src/
│   │   │       └── lib.rs
│   │   └── output-only-01-missing-unsafe/
│   │       ├── Cargo.toml
│   │       ├── output.txt
│   │       └── src/
│   │           └── main.rs
│   └── ch21-web-server/
│       ├── listing-21-01/
│       │   ├── Cargo.toml
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-02/
│       │   ├── Cargo.toml
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-03/
│       │   ├── Cargo.toml
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-05/
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-06/
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-07/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-09/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-10/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-11/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-12/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       └── main.rs
│       ├── listing-21-13/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-14/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-15/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-16/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-17/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-18/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-19/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-20/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-21/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-22/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-23/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-24/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── listing-21-25/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── no-listing-01-define-threadpool-struct/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── no-listing-02-impl-threadpool-new/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── no-listing-03-define-execute/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── no-listing-04-update-drop-definition/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   ├── output.txt
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── no-listing-05-fix-worker-new/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       ├── no-listing-06-fix-threadpool-drop/
│       │   ├── 404.html
│       │   ├── Cargo.toml
│       │   ├── hello.html
│       │   └── src/
│       │       ├── lib.rs
│       │       └── main.rs
│       └── no-listing-07-final-code/
│           ├── 404.html
│           ├── Cargo.toml
│           ├── hello.html
│           └── src/
│               ├── lib.rs
│               └── main.rs
├── nostarch/
│   ├── appendix.md
│   ├── appendix_a.md
│   ├── appendix_b.md
│   ├── appendix_c.md
│   ├── appendix_d.md
│   ├── appendix_e.md
│   ├── bio.md
│   ├── book.toml
│   ├── chapter00.md
│   ├── chapter01.md
│   ├── chapter02.md
│   ├── chapter03.md
│   ├── chapter04.md
│   ├── chapter05.md
│   ├── chapter06.md
│   ├── chapter07.md
│   ├── chapter08.md
│   ├── chapter09.md
│   ├── chapter10.md
│   ├── chapter11.md
│   ├── chapter12.md
│   ├── chapter13.md
│   ├── chapter14.md
│   ├── chapter15.md
│   ├── chapter16.md
│   ├── chapter17.md
│   ├── chapter18.md
│   ├── chapter19.md
│   ├── chapter20.md
│   ├── chapter21.md
│   ├── docx/
│   │   ├── appendix_a.docx
│   │   ├── appendix_b.docx
│   │   ├── appendix_c.docx
│   │   ├── appendix_d.docx
│   │   ├── appendix_e.docx
│   │   ├── backports/
│   │   │   └── Index.docx
│   │   ├── chapter01.docx
│   │   ├── chapter02.docx
│   │   ├── chapter03.docx
│   │   ├── chapter04.docx
│   │   ├── chapter05.docx
│   │   ├── chapter06.docx
│   │   ├── chapter07.docx
│   │   ├── chapter08.docx
│   │   ├── chapter09.docx
│   │   ├── chapter10.docx
│   │   ├── chapter11.docx
│   │   ├── chapter12.docx
│   │   ├── chapter13.docx
│   │   ├── chapter14.docx
│   │   ├── chapter15.docx
│   │   ├── chapter16.docx
│   │   ├── chapter17.docx
│   │   ├── chapter18.docx
│   │   ├── chapter19.docx
│   │   ├── chapter20.docx
│   │   ├── chapter21.docx
│   │   └── frontmatter.docx
│   ├── foreword.md
│   ├── frontmatter.md
│   ├── introduction.md
│   └── preface.md
├── packages/
│   ├── mdbook-trpl/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   ├── src/
│   │   │   ├── bin/
│   │   │   │   ├── README - mdbook-trpl-note.md
│   │   │   │   ├── figure.rs
│   │   │   │   ├── heading.rs
│   │   │   │   ├── listing.rs
│   │   │   │   └── note.rs
│   │   │   ├── config/
│   │   │   │   ├── mod.rs
│   │   │   │   └── tests.rs
│   │   │   ├── figure/
│   │   │   │   ├── mod.rs
│   │   │   │   └── tests.rs
│   │   │   ├── heading/
│   │   │   │   ├── mod.rs
│   │   │   │   └── tests.rs
│   │   │   ├── lib.rs
│   │   │   ├── listing/
│   │   │   │   ├── mod.rs
│   │   │   │   └── tests.rs
│   │   │   └── note/
│   │   │       ├── mod.rs
│   │   │       └── tests.rs
│   │   └── tests/
│   │       └── integration/
│   │           └── main.rs
│   ├── tools/
│   │   ├── Cargo.toml
│   │   └── src/
│   │       └── bin/
│   │           ├── cleanup_blockquotes.rs
│   │           ├── concat_chapters.rs
│   │           ├── convert_quotes.rs
│   │           ├── lfp.rs
│   │           ├── link2print.rs
│   │           ├── release_listings.rs
│   │           ├── remove_hidden_lines.rs
│   │           ├── remove_links.rs
│   │           └── remove_markup.rs
│   └── trpl/
│       ├── CHANGELOG.md
│       ├── CONTRIBUTING.md
│       ├── Cargo.toml
│       ├── LICENSE-APACHE
│       ├── LICENSE-MIT
│       ├── README.md
│       ├── src/
│       │   └── lib.rs
│       └── tests/
│           └── integration/
│               ├── main.rs
│               └── to-read.txt
├── redirects/
│   ├── README.md
│   ├── SUMMARY.md
│   ├── associated-types.md
│   ├── attributes.md
│   ├── bibliography.md
│   ├── borrow-and-asref.md
│   ├── casting-between-types.md
│   ├── choosing-your-guarantees.md
│   ├── closures.md
│   ├── comments.md
│   ├── compiler-plugins.md
│   ├── concurrency.md
│   ├── conditional-compilation.md
│   ├── const-and-static.md
│   ├── crates-and-modules.md
│   ├── deref-coercions.md
│   ├── documentation.md
│   ├── drop.md
│   ├── effective-rust.md
│   ├── enums.md
│   ├── error-handling.md
│   ├── ffi.md
│   ├── functions.md
│   ├── generics.md
│   ├── getting-started.md
│   ├── glossary.md
│   ├── guessing-game.md
│   ├── if-let.md
│   ├── if.md
│   ├── iterators.md
│   ├── lifetimes.md
│   ├── loops.md
│   ├── macros.md
│   ├── match.md
│   ├── method-syntax.md
│   ├── mutability.md
│   ├── operators-and-overloading.md
│   ├── ownership.md
│   ├── patterns.md
│   ├── primitive-types.md
│   ├── procedural-macros.md
│   ├── raw-pointers.md
│   ├── references-and-borrowing.md
│   ├── release-channels.md
│   ├── strings.md
│   ├── structs.md
│   ├── syntax-and-semantics.md
│   ├── syntax-index.md
│   ├── testing.md
│   ├── the-stack-and-the-heap.md
│   ├── trait-objects.md
│   ├── traits.md
│   ├── type-aliases.md
│   ├── ufcs.md
│   ├── unsafe.md
│   ├── unsized-types.md
│   ├── using-rust-without-the-standard-library.md
│   ├── variable-bindings.md
│   └── vectors.md
├── rust-toolchain
├── rustfmt.toml
├── second-edition/
│   ├── book.toml
│   ├── dot/
│   │   ├── trpl04-01.dot
│   │   ├── trpl04-02.dot
│   │   ├── trpl04-03.dot
│   │   ├── trpl04-04.dot
│   │   ├── trpl04-05.dot
│   │   ├── trpl04-06.dot
│   │   ├── trpl15-01.dot
│   │   ├── trpl15-02.dot
│   │   └── trpl15-03.dot
│   └── src/
│       ├── SUMMARY.md
│       ├── appendix-00.md
│       ├── appendix-01-keywords.md
│       ├── appendix-02-operators.md
│       ├── appendix-03-derivable-traits.md
│       ├── appendix-04-macros.md
│       ├── appendix-05-translation.md
│       ├── appendix-06-newest-features.md
│       ├── appendix-07-nightly-rust.md
│       ├── ch00-00-introduction.md
│       ├── ch01-00-getting-started.md
│       ├── ch01-01-installation.md
│       ├── ch01-02-hello-world.md
│       ├── ch01-03-hello-cargo.md
│       ├── ch02-00-guessing-game-tutorial.md
│       ├── ch03-00-common-programming-concepts.md
│       ├── ch03-01-variables-and-mutability.md
│       ├── ch03-02-data-types.md
│       ├── ch03-03-how-functions-work.md
│       ├── ch03-04-comments.md
│       ├── ch03-05-control-flow.md
│       ├── ch04-00-understanding-ownership.md
│       ├── ch04-01-what-is-ownership.md
│       ├── ch04-02-references-and-borrowing.md
│       ├── ch04-03-slices.md
│       ├── ch05-00-structs.md
│       ├── ch05-01-defining-structs.md
│       ├── ch05-02-example-structs.md
│       ├── ch05-03-method-syntax.md
│       ├── ch06-00-enums.md
│       ├── ch06-01-defining-an-enum.md
│       ├── ch06-02-match.md
│       ├── ch06-03-if-let.md
│       ├── ch07-00-modules.md
│       ├── ch07-01-mod-and-the-filesystem.md
│       ├── ch07-02-controlling-visibility-with-pub.md
│       ├── ch07-03-importing-names-with-use.md
│       ├── ch08-00-common-collections.md
│       ├── ch08-01-vectors.md
│       ├── ch08-02-strings.md
│       ├── ch08-03-hash-maps.md
│       ├── ch09-00-error-handling.md
│       ├── ch09-01-unrecoverable-errors-with-panic.md
│       ├── ch09-02-recoverable-errors-with-result.md
│       ├── ch09-03-to-panic-or-not-to-panic.md
│       ├── ch10-00-generics.md
│       ├── ch10-01-syntax.md
│       ├── ch10-02-traits.md
│       ├── ch10-03-lifetime-syntax.md
│       ├── ch11-00-testing.md
│       ├── ch11-01-writing-tests.md
│       ├── ch11-02-running-tests.md
│       ├── ch11-03-test-organization.md
│       ├── ch12-00-an-io-project.md
│       ├── ch12-01-accepting-command-line-arguments.md
│       ├── ch12-02-reading-a-file.md
│       ├── ch12-03-improving-error-handling-and-modularity.md
│       ├── ch12-04-testing-the-librarys-functionality.md
│       ├── ch12-05-working-with-environment-variables.md
│       ├── ch12-06-writing-to-stderr-instead-of-stdout.md
│       ├── ch13-00-functional-features.md
│       ├── ch13-01-closures.md
│       ├── ch13-02-iterators.md
│       ├── ch13-03-improving-our-io-project.md
│       ├── ch13-04-performance.md
│       ├── ch14-00-more-about-cargo.md
│       ├── ch14-01-release-profiles.md
│       ├── ch14-02-publishing-to-crates-io.md
│       ├── ch14-03-cargo-workspaces.md
│       ├── ch14-04-installing-binaries.md
│       ├── ch14-05-extending-cargo.md
│       ├── ch15-00-smart-pointers.md
│       ├── ch15-01-box.md
│       ├── ch15-02-deref.md
│       ├── ch15-03-drop.md
│       ├── ch15-04-rc.md
│       ├── ch15-05-interior-mutability.md
│       ├── ch15-06-reference-cycles.md
│       ├── ch16-00-concurrency.md
│       ├── ch16-01-threads.md
│       ├── ch16-02-message-passing.md
│       ├── ch16-03-shared-state.md
│       ├── ch16-04-extensible-concurrency-sync-and-send.md
│       ├── ch17-00-oop.md
│       ├── ch17-01-what-is-oo.md
│       ├── ch17-02-trait-objects.md
│       ├── ch17-03-oo-design-patterns.md
│       ├── ch18-00-patterns.md
│       ├── ch18-01-all-the-places-for-patterns.md
│       ├── ch18-02-refutability.md
│       ├── ch18-03-pattern-syntax.md
│       ├── ch19-00-advanced-features.md
│       ├── ch19-01-unsafe-rust.md
│       ├── ch19-02-advanced-lifetimes.md
│       ├── ch19-03-advanced-traits.md
│       ├── ch19-04-advanced-types.md
│       ├── ch19-05-advanced-functions-and-closures.md
│       ├── ch20-00-final-project-a-web-server.md
│       ├── ch20-01-single-threaded.md
│       ├── ch20-02-multithreaded.md
│       ├── ch20-03-graceful-shutdown-and-cleanup.md
│       └── foreword.md
├── src/
│   ├── SUMMARY.md
│   ├── appendix-00.md
│   ├── appendix-01-keywords.md
│   ├── appendix-02-operators.md
│   ├── appendix-03-derivable-traits.md
│   ├── appendix-04-useful-development-tools.md
│   ├── appendix-05-editions.md
│   ├── appendix-06-translation.md
│   ├── appendix-07-nightly-rust.md
│   ├── ch00-00-introduction.md
│   ├── ch01-00-getting-started.md
│   ├── ch01-01-installation.md
│   ├── ch01-02-hello-world.md
│   ├── ch01-03-hello-cargo.md
│   ├── ch02-00-guessing-game-tutorial.md
│   ├── ch03-00-common-programming-concepts.md
│   ├── ch03-01-variables-and-mutability.md
│   ├── ch03-02-data-types.md
│   ├── ch03-03-how-functions-work.md
│   ├── ch03-04-comments.md
│   ├── ch03-05-control-flow.md
│   ├── ch04-00-understanding-ownership.md
│   ├── ch04-01-what-is-ownership.md
│   ├── ch04-02-references-and-borrowing.md
│   ├── ch04-03-slices.md
│   ├── ch05-00-structs.md
│   ├── ch05-01-defining-structs.md
│   ├── ch05-02-example-structs.md
│   ├── ch05-03-method-syntax.md
│   ├── ch06-00-enums.md
│   ├── ch06-01-defining-an-enum.md
│   ├── ch06-02-match.md
│   ├── ch06-03-if-let.md
│   ├── ch07-00-managing-growing-projects-with-packages-crates-and-modules.md
│   ├── ch07-01-packages-and-crates.md
│   ├── ch07-02-defining-modules-to-control-scope-and-privacy.md
│   ├── ch07-03-paths-for-referring-to-an-item-in-the-module-tree.md
│   ├── ch07-04-bringing-paths-into-scope-with-the-use-keyword.md
│   ├── ch07-05-separating-modules-into-different-files.md
│   ├── ch08-00-common-collections.md
│   ├── ch08-01-vectors.md
│   ├── ch08-02-strings.md
│   ├── ch08-03-hash-maps.md
│   ├── ch09-00-error-handling.md
│   ├── ch09-01-unrecoverable-errors-with-panic.md
│   ├── ch09-02-recoverable-errors-with-result.md
│   ├── ch09-03-to-panic-or-not-to-panic.md
│   ├── ch10-00-generics.md
│   ├── ch10-01-syntax.md
│   ├── ch10-02-traits.md
│   ├── ch10-03-lifetime-syntax.md
│   ├── ch11-00-testing.md
│   ├── ch11-01-writing-tests.md
│   ├── ch11-02-running-tests.md
│   ├── ch11-03-test-organization.md
│   ├── ch12-00-an-io-project.md
│   ├── ch12-01-accepting-command-line-arguments.md
│   ├── ch12-02-reading-a-file.md
│   ├── ch12-03-improving-error-handling-and-modularity.md
│   ├── ch12-04-testing-the-librarys-functionality.md
│   ├── ch12-05-working-with-environment-variables.md
│   ├── ch12-06-writing-to-stderr-instead-of-stdout.md
│   ├── ch13-00-functional-features.md
│   ├── ch13-01-closures.md
│   ├── ch13-02-iterators.md
│   ├── ch13-03-improving-our-io-project.md
│   ├── ch13-04-performance.md
│   ├── ch14-00-more-about-cargo.md
│   ├── ch14-01-release-profiles.md
│   ├── ch14-02-publishing-to-crates-io.md
│   ├── ch14-03-cargo-workspaces.md
│   ├── ch14-04-installing-binaries.md
│   ├── ch14-05-extending-cargo.md
│   ├── ch15-00-smart-pointers.md
│   ├── ch15-01-box.md
│   ├── ch15-02-deref.md
│   ├── ch15-03-drop.md
│   ├── ch15-04-rc.md
│   ├── ch15-05-interior-mutability.md
│   ├── ch15-06-reference-cycles.md
│   ├── ch16-00-concurrency.md
│   ├── ch16-01-threads.md
│   ├── ch16-02-message-passing.md
│   ├── ch16-03-shared-state.md
│   ├── ch16-04-extensible-concurrency-sync-and-send.md
│   ├── ch17-00-async-await.md
│   ├── ch17-01-futures-and-syntax.md
│   ├── ch17-02-concurrency-with-async.md
│   ├── ch17-03-more-futures.md
│   ├── ch17-04-streams.md
│   ├── ch17-05-traits-for-async.md
│   ├── ch17-06-futures-tasks-threads.md
│   ├── ch18-00-oop.md
│   ├── ch18-01-what-is-oo.md
│   ├── ch18-02-trait-objects.md
│   ├── ch18-03-oo-design-patterns.md
│   ├── ch19-00-patterns.md
│   ├── ch19-01-all-the-places-for-patterns.md
│   ├── ch19-02-refutability.md
│   ├── ch19-03-pattern-syntax.md
│   ├── ch20-00-advanced-features.md
│   ├── ch20-01-unsafe-rust.md
│   ├── ch20-02-advanced-traits.md
│   ├── ch20-03-advanced-types.md
│   ├── ch20-04-advanced-functions-and-closures.md
│   ├── ch20-05-macros.md
│   ├── ch21-00-final-project-a-web-server.md
│   ├── ch21-01-single-threaded.md
│   ├── ch21-02-multithreaded.md
│   ├── ch21-03-graceful-shutdown-and-cleanup.md
│   ├── foreword.md
│   └── title-page.md
├── style-guide.md
├── theme/
│   ├── 2018-edition.css
│   ├── listing.css
│   └── semantic-notes.css
└── tools/
    ├── convert-quotes.sh
    ├── doc-to-md.sh
    ├── docx-to-md.xsl
    ├── generate-preview.sh
    ├── megadiff.sh
    ├── nostarch.sh
    ├── preview-robots.txt
    ├── update-editions.sh
    └── update-rustc.sh
Download .txt
SYMBOL INDEX (1666 symbols across 651 files)

FILE: 2018-edition/ferris.js
  function attachFerrises (line 26) | function attachFerrises (type) {
  function attachFerris (line 38) | function attachFerris (element, type) {

FILE: ferris.js
  constant FERRIS_TYPES (line 8) | const FERRIS_TYPES = [
  function attachFerrises (line 32) | function attachFerrises(type) {
  function prepareFerrisContainer (line 64) | function prepareFerrisContainer(element, useButtons) {
  function createFerris (line 88) | function createFerris(type, size) {

FILE: listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs
  function main (line 7) | fn main() {

FILE: listings/ch02-guessing-game-tutorial/listing-02-02/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch02-guessing-game-tutorial/listing-02-03/src/main.rs
  function main (line 7) | fn main() {

FILE: listings/ch02-guessing-game-tutorial/listing-02-04/src/main.rs
  function main (line 7) | fn main() {

FILE: listings/ch02-guessing-game-tutorial/listing-02-05/src/main.rs
  function main (line 6) | fn main() {

FILE: listings/ch02-guessing-game-tutorial/listing-02-06/src/main.rs
  function main (line 6) | fn main() {

FILE: listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/src/main.rs
  function main (line 6) | fn main() {

FILE: listings/ch02-guessing-game-tutorial/no-listing-04-looping/src/main.rs
  function main (line 6) | fn main() {

FILE: listings/ch02-guessing-game-tutorial/no-listing-05-quitting/src/main.rs
  function main (line 6) | fn main() {

FILE: listings/ch03-common-programming-concepts/listing-03-01/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/listing-03-02/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/listing-03-03/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/listing-03-04/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/listing-03-05/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-02-adding-mut/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-03-shadowing/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-06-floating-point/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-08-boolean/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-09-char/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-10-tuples/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-13-arrays/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-14-array-indexing/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-16-functions/src/main.rs
  function main (line 1) | fn main() {
  function another_function (line 7) | fn another_function() {

FILE: listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/src/main.rs
  function main (line 1) | fn main() {
  function another_function (line 5) | fn another_function(x: i32) {

FILE: listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/src/main.rs
  function main (line 1) | fn main() {
  function print_labeled_measurement (line 5) | fn print_labeled_measurement(value: i32, unit_label: char) {

FILE: listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-21-function-return-values/src/main.rs
  function five (line 1) | fn five() -> i32 {
  function main (line 5) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/src/main.rs
  function main (line 1) | fn main() {
  function plus_one (line 7) | fn plus_one(x: i32) -> i32 {

FILE: listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/src/main.rs
  function main (line 1) | fn main() {
  function plus_one (line 7) | fn plus_one(x: i32) -> i32 {

FILE: listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-26-if-true/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-27-if-false/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-30-else-if/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-32-loop/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/no-listing-34-for-range/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/listing-04-01/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/listing-04-02/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/listing-04-03/src/main.rs
  function main (line 1) | fn main() {
  function takes_ownership (line 16) | fn takes_ownership(some_string: String) { // some_string comes into scope
  function makes_copy (line 21) | fn makes_copy(some_integer: i32) { // some_integer comes into scope

FILE: listings/ch04-understanding-ownership/listing-04-04/src/main.rs
  function main (line 1) | fn main() {
  function gives_ownership (line 13) | fn gives_ownership() -> String {       // gives_ownership will move its
  function takes_and_gives_back (line 25) | fn takes_and_gives_back(a_string: String) -> String {

FILE: listings/ch04-understanding-ownership/listing-04-05/src/main.rs
  function main (line 1) | fn main() {
  function calculate_length (line 9) | fn calculate_length(s: String) -> (String, usize) {

FILE: listings/ch04-understanding-ownership/listing-04-06/src/main.rs
  function main (line 1) | fn main() {
  function change (line 7) | fn change(some_string: &String) {

FILE: listings/ch04-understanding-ownership/listing-04-07/src/main.rs
  function first_word (line 2) | fn first_word(s: &String) -> usize {
  function main (line 21) | fn main() {}

FILE: listings/ch04-understanding-ownership/listing-04-08/src/main.rs
  function first_word (line 1) | fn first_word(s: &String) -> usize {
  function main (line 14) | fn main() {

FILE: listings/ch04-understanding-ownership/listing-04-09/src/main.rs
  function first_word (line 2) | fn first_word(s: &str) -> &str {
  function main (line 16) | fn main() {

FILE: listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/no-listing-02-string-scope/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/no-listing-03-string-move/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/no-listing-04b-replacement-drop/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/no-listing-05-clone/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/no-listing-06-copy/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/no-listing-07-reference/src/main.rs
  function main (line 2) | fn main() {
  function calculate_length (line 12) | fn calculate_length(s: &String) -> usize {

FILE: listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/src/main.rs
  function main (line 1) | fn main() {
  function calculate_length (line 10) | fn calculate_length(s: &String) -> usize { // s is a reference to a String

FILE: listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/src/main.rs
  function main (line 1) | fn main() {
  function change (line 7) | fn change(some_string: &mut String) {

FILE: listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/no-listing-14-dangling-reference/src/main.rs
  function main (line 1) | fn main() {
  function dangle (line 5) | fn dangle() -> &String {

FILE: listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/src/main.rs
  function main (line 1) | fn main() {
  function dangle (line 6) | fn dangle() -> &String { // dangle returns a reference to a String

FILE: listings/ch04-understanding-ownership/no-listing-16-no-dangle/src/main.rs
  function main (line 1) | fn main() {
  function no_dangle (line 6) | fn no_dangle() -> String {

FILE: listings/ch04-understanding-ownership/no-listing-17-slice/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch04-understanding-ownership/no-listing-18-first-word-slice/src/main.rs
  function first_word (line 2) | fn first_word(s: &String) -> &str {
  function main (line 15) | fn main() {}

FILE: listings/ch04-understanding-ownership/no-listing-19-slice-error/src/main.rs
  function first_word (line 1) | fn first_word(s: &String) -> &str {
  function main (line 14) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-01/src/main.rs
  type User (line 2) | struct User {
  function main (line 10) | fn main() {}

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-02/src/main.rs
  type User (line 1) | struct User {
  function main (line 9) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-03/src/main.rs
  type User (line 1) | struct User {
  function main (line 9) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-04/src/main.rs
  type User (line 1) | struct User {
  function build_user (line 9) | fn build_user(email: String, username: String) -> User {
  function main (line 19) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-05/src/main.rs
  type User (line 1) | struct User {
  function build_user (line 9) | fn build_user(email: String, username: String) -> User {
  function main (line 19) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-06/src/main.rs
  type User (line 1) | struct User {
  function main (line 9) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-07/src/main.rs
  type User (line 1) | struct User {
  function main (line 9) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-08/src/main.rs
  function main (line 2) | fn main() {
  function area (line 13) | fn area(width: u32, height: u32) -> u32 {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-09/src/main.rs
  function main (line 1) | fn main() {
  function area (line 10) | fn area(dimensions: (u32, u32)) -> u32 {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-10/src/main.rs
  type Rectangle (line 1) | struct Rectangle {
  function main (line 6) | fn main() {
  function area (line 18) | fn area(rectangle: &Rectangle) -> u32 {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-11/src/main.rs
  type Rectangle (line 1) | struct Rectangle {
  function main (line 6) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-12/src/main.rs
  type Rectangle (line 2) | struct Rectangle {
  function main (line 7) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-13/src/main.rs
  type Rectangle (line 2) | struct Rectangle {
    method area (line 8) | fn area(&self) -> u32 {
  function main (line 13) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-14/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-15/src/main.rs
  type Rectangle (line 2) | struct Rectangle {
    method area (line 9) | fn area(&self) -> u32 {
    method can_hold (line 13) | fn can_hold(&self, other: &Rectangle) -> bool {
  function main (line 19) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/listing-05-16/src/main.rs
  type Rectangle (line 2) | struct Rectangle {
    method area (line 9) | fn area(&self) -> u32 {
    method can_hold (line 15) | fn can_hold(&self, other: &Rectangle) -> bool {
  function main (line 21) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/src/main.rs
  type Color (line 1) | struct Color(i32, i32, i32);
  type Point (line 2) | struct Point(i32, i32, i32);
  function main (line 4) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/src/main.rs
  type User (line 1) | struct User {
  function main (line 8) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/src/main.rs
  type Rectangle (line 2) | struct Rectangle {
    method square (line 9) | fn square(size: u32) -> Self {
  function main (line 18) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/src/main.rs
  type AlwaysEqual (line 1) | struct AlwaysEqual;
  function main (line 3) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/src/main.rs
  type Rectangle (line 2) | struct Rectangle {
  function main (line 7) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/src/main.rs
  type Rectangle (line 2) | struct Rectangle {
    method width (line 9) | fn width(&self) -> bool {
  function main (line 14) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/src/main.rs
  type Rectangle (line 1) | struct Rectangle {
  function main (line 6) | fn main() {

FILE: listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/src/main.rs
  type Rectangle (line 2) | struct Rectangle {
  function main (line 7) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/listing-06-01/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/listing-06-02/src/main.rs
  type Message (line 2) | enum Message {
  function main (line 10) | fn main() {}

FILE: listings/ch06-enums-and-pattern-matching/listing-06-03/src/main.rs
  type Coin (line 2) | enum Coin {
  function value_in_cents (line 9) | fn value_in_cents(coin: Coin) -> u8 {
  function main (line 19) | fn main() {}

FILE: listings/ch06-enums-and-pattern-matching/listing-06-04/src/main.rs
  type UsState (line 3) | enum UsState {
  type Coin (line 9) | enum Coin {
  function main (line 17) | fn main() {}

FILE: listings/ch06-enums-and-pattern-matching/listing-06-05/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/listing-06-06/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/listing-06-07/src/main.rs
  type UsState (line 2) | enum UsState {
    method existed_in (line 10) | fn existed_in(&self, year: u16) -> bool {
  type Coin (line 20) | enum Coin {
  function describe_state_quarter (line 28) | fn describe_state_quarter(coin: Coin) -> Option<String> {
  function main (line 41) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/listing-06-08/src/main.rs
  type UsState (line 2) | enum UsState {
    method existed_in (line 9) | fn existed_in(&self, year: u16) -> bool {
  type Coin (line 18) | enum Coin {
  function describe_state_quarter (line 26) | fn describe_state_quarter(coin: Coin) -> Option<String> {
  function main (line 41) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/listing-06-09/src/main.rs
  type UsState (line 2) | enum UsState {
    method existed_in (line 9) | fn existed_in(&self, year: u16) -> bool {
  type Coin (line 18) | enum Coin {
  function describe_state_quarter (line 26) | fn describe_state_quarter(coin: Coin) -> Option<String> {
  function main (line 39) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/src/main.rs
  type IpAddrKind (line 2) | enum IpAddrKind {
  function main (line 8) | fn main() {
  function route (line 21) | fn route(ip_kind: IpAddrKind) {}

FILE: listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/src/main.rs
  type QuitMessage (line 2) | struct QuitMessage;
  type MoveMessage (line 3) | struct MoveMessage {
  type WriteMessage (line 7) | struct WriteMessage(String);
  type ChangeColorMessage (line 8) | struct ChangeColorMessage(i32, i32, i32);
  function main (line 11) | fn main() {}

FILE: listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/src/main.rs
  type Coin (line 1) | enum Coin {
  function value_in_cents (line 9) | fn value_in_cents(coin: Coin) -> u8 {
  function main (line 22) | fn main() {}

FILE: listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/src/main.rs
  type UsState (line 2) | enum UsState {
  type Coin (line 8) | enum Coin {
  function value_in_cents (line 16) | fn value_in_cents(coin: Coin) -> u8 {
  function main (line 29) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/src/main.rs
  type UsState (line 2) | enum UsState {
  type Coin (line 8) | enum Coin {
  function main (line 15) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/src/main.rs
  type UsState (line 2) | enum UsState {
  type Coin (line 8) | enum Coin {
  function main (line 15) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch07-managing-growing-projects/listing-07-01/src/lib.rs
  function add_to_waitlist (line 3) | fn add_to_waitlist() {}
  function seat_at_table (line 5) | fn seat_at_table() {}
  function take_order (line 9) | fn take_order() {}
  function serve_order (line 11) | fn serve_order() {}
  function take_payment (line 13) | fn take_payment() {}

FILE: listings/ch07-managing-growing-projects/listing-07-03/src/lib.rs
  function add_to_waitlist (line 3) | fn add_to_waitlist() {}
  function eat_at_restaurant (line 7) | pub fn eat_at_restaurant() {

FILE: listings/ch07-managing-growing-projects/listing-07-05/src/lib.rs
  function add_to_waitlist (line 4) | fn add_to_waitlist() {}
  function eat_at_restaurant (line 10) | pub fn eat_at_restaurant() {

FILE: listings/ch07-managing-growing-projects/listing-07-07/src/lib.rs
  function add_to_waitlist (line 4) | pub fn add_to_waitlist() {}
  function eat_at_restaurant (line 10) | pub fn eat_at_restaurant() {

FILE: listings/ch07-managing-growing-projects/listing-07-08/src/lib.rs
  function deliver_order (line 1) | fn deliver_order() {}
  function fix_incorrect_order (line 4) | fn fix_incorrect_order() {
  function cook_order (line 9) | fn cook_order() {}

FILE: listings/ch07-managing-growing-projects/listing-07-09/src/lib.rs
  type Breakfast (line 2) | pub struct Breakfast {
    method summer (line 8) | pub fn summer(toast: &str) -> Breakfast {
  function eat_at_restaurant (line 17) | pub fn eat_at_restaurant() {

FILE: listings/ch07-managing-growing-projects/listing-07-10/src/lib.rs
  type Appetizer (line 2) | pub enum Appetizer {
  function eat_at_restaurant (line 8) | pub fn eat_at_restaurant() {

FILE: listings/ch07-managing-growing-projects/listing-07-11/src/lib.rs
  function add_to_waitlist (line 3) | pub fn add_to_waitlist() {}
  function eat_at_restaurant (line 9) | pub fn eat_at_restaurant() {

FILE: listings/ch07-managing-growing-projects/listing-07-12/src/lib.rs
  function add_to_waitlist (line 3) | pub fn add_to_waitlist() {}
  function eat_at_restaurant (line 10) | pub fn eat_at_restaurant() {

FILE: listings/ch07-managing-growing-projects/listing-07-13/src/lib.rs
  function add_to_waitlist (line 3) | pub fn add_to_waitlist() {}
  function eat_at_restaurant (line 9) | pub fn eat_at_restaurant() {

FILE: listings/ch07-managing-growing-projects/listing-07-14/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch07-managing-growing-projects/listing-07-15/src/lib.rs
  function function1 (line 5) | fn function1() -> fmt::Result {
  function function2 (line 12) | fn function2() -> io::Result<()> {

FILE: listings/ch07-managing-growing-projects/listing-07-16/src/lib.rs
  function function1 (line 5) | fn function1() -> Result {
  function function2 (line 12) | fn function2() -> IoResult<()> {

FILE: listings/ch07-managing-growing-projects/listing-07-17/src/lib.rs
  function add_to_waitlist (line 3) | pub fn add_to_waitlist() {}
  function eat_at_restaurant (line 9) | pub fn eat_at_restaurant() {

FILE: listings/ch07-managing-growing-projects/listing-07-18/src/main.rs
  function main (line 8) | fn main() {

FILE: listings/ch07-managing-growing-projects/listing-07-21-and-22/src/front_of_house.rs
  function add_to_waitlist (line 2) | pub fn add_to_waitlist() {}

FILE: listings/ch07-managing-growing-projects/listing-07-21-and-22/src/lib.rs
  function eat_at_restaurant (line 5) | pub fn eat_at_restaurant() {

FILE: listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/src/main.rs
  function main (line 9) | fn main() {

FILE: listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/front_of_house/hosting.rs
  function add_to_waitlist (line 1) | pub fn add_to_waitlist() {}

FILE: listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/lib.rs
  function eat_at_restaurant (line 5) | pub fn eat_at_restaurant() {

FILE: listings/ch07-managing-growing-projects/quick-reference-example/src/garden/vegetables.rs
  type Asparagus (line 2) | pub struct Asparagus {}

FILE: listings/ch07-managing-growing-projects/quick-reference-example/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch08-common-collections/listing-08-01/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-02/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-03/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-04/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-05/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-06/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-07/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-08/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-09/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-10/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-11/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-12/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-13/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-14/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-15/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-16/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-17/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-18/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-19/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-20/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-21/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-22/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-23/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-24/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/listing-08-25/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/no-listing-01-concat-multiple-strings/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/no-listing-02-format/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch08-common-collections/output-only-01-not-char-boundary/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch09-error-handling/listing-09-01/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch09-error-handling/listing-09-03/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch09-error-handling/listing-09-04/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch09-error-handling/listing-09-05/src/main.rs
  function main (line 4) | fn main() {

FILE: listings/ch09-error-handling/listing-09-06/src/main.rs
  function read_username_from_file (line 5) | fn read_username_from_file() -> Result<String, io::Error> {
  function main (line 22) | fn main() {

FILE: listings/ch09-error-handling/listing-09-07/src/main.rs
  function read_username_from_file (line 5) | fn read_username_from_file() -> Result<String, io::Error> {
  function main (line 13) | fn main() {

FILE: listings/ch09-error-handling/listing-09-08/src/main.rs
  function read_username_from_file (line 5) | fn read_username_from_file() -> Result<String, io::Error> {
  function main (line 14) | fn main() {

FILE: listings/ch09-error-handling/listing-09-09/src/main.rs
  function read_username_from_file (line 5) | fn read_username_from_file() -> Result<String, io::Error> {
  function main (line 10) | fn main() {

FILE: listings/ch09-error-handling/listing-09-10/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch09-error-handling/listing-09-11/src/main.rs
  function last_char_of_first_line (line 2) | fn last_char_of_first_line(text: &str) -> Option<char> {
  function main (line 7) | fn main() {

FILE: listings/ch09-error-handling/listing-09-12/src/main.rs
  function main (line 4) | fn main() -> Result<(), Box<dyn Error>> {

FILE: listings/ch09-error-handling/listing-09-13/src/guessing_game.rs
  type Guess (line 1) | pub struct Guess {
    method new (line 6) | pub fn new(value: i32) -> Guess {
    method value (line 14) | pub fn value(&self) -> i32 {

FILE: listings/ch09-error-handling/listing-09-13/src/main.rs
  function main (line 8) | fn main() {

FILE: listings/ch09-error-handling/no-listing-01-panic/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch09-error-handling/no-listing-04-unwrap/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch09-error-handling/no-listing-05-expect/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch09-error-handling/no-listing-09-guess-out-of-range/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/src/main.rs
  function main (line 2) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/src/main.rs
  function largest (line 2) | fn largest(list: &[i32]) -> &i32 {
  function main (line 14) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/src/main.rs
  function largest_i32 (line 2) | fn largest_i32(list: &[i32]) -> &i32 {
  function largest_char (line 14) | fn largest_char(list: &[char]) -> &char {
  function main (line 26) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/src/main.rs
  function largest (line 1) | fn largest<T>(list: &[T]) -> &T {
  function main (line 13) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/src/main.rs
  type Point (line 1) | struct Point<T> {
  function main (line 6) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/src/main.rs
  type Point (line 1) | struct Point<T> {
  function main (line 6) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/src/main.rs
  type Point (line 1) | struct Point<T, U> {
  function main (line 6) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/src/main.rs
  type Point (line 1) | struct Point<T> {
  function x (line 7) | fn x(&self) -> &T {
  function main (line 12) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/src/main.rs
  type Point (line 1) | struct Point<T> {
  function x (line 7) | fn x(&self) -> &T {
  function distance_from_origin (line 14) | fn distance_from_origin(&self) -> f32 {
  function main (line 20) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/src/main.rs
  type Point (line 1) | struct Point<X1, Y1> {
  function mixup (line 7) | fn mixup<X2, Y2>(self, other: Point<X2, Y2>) -> Point<X1, Y2> {
  function main (line 15) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/src/lib.rs
  type Summary (line 1) | pub trait Summary {
    method summarize (line 2) | fn summarize(&self) -> String;

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/src/lib.rs
  type Summary (line 1) | pub trait Summary {
    method summarize (line 2) | fn summarize(&self) -> String;
    method summarize (line 14) | fn summarize(&self) -> String {
    method summarize (line 27) | fn summarize(&self) -> String {
  type NewsArticle (line 6) | pub struct NewsArticle {
  type SocialPost (line 19) | pub struct SocialPost {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/src/lib.rs
  type Summary (line 2) | pub trait Summary {
    method summarize (line 3) | fn summarize(&self) -> String {
    method summarize (line 26) | fn summarize(&self) -> String {
  type NewsArticle (line 9) | pub struct NewsArticle {
  type SocialPost (line 18) | pub struct SocialPost {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/src/lib.rs
  type Pair (line 3) | struct Pair<T> {
  function new (line 9) | fn new(x: T, y: T) -> Self {
  function cmp_display (line 15) | fn cmp_display(&self) {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/src/main.rs
  function main (line 1) | fn main() {
  function longest (line 10) | fn longest(x: &str, y: &str) -> &str {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/src/main.rs
  function main (line 1) | fn main() {
  function longest (line 10) | fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/src/main.rs
  function main (line 2) | fn main() {
  function longest (line 13) | fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/src/main.rs
  function main (line 2) | fn main() {
  function longest (line 13) | fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/src/main.rs
  type ImportantExcerpt (line 1) | struct ImportantExcerpt<'a> {
  function main (line 5) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/src/main.rs
  function first_word (line 2) | fn first_word(s: &str) -> &str {
  function main (line 15) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/src/lib.rs
  type Summary (line 1) | pub trait Summary {
    method summarize (line 2) | fn summarize(&self) -> String;
    method summarize (line 13) | fn summarize(&self) -> String {
    method summarize (line 26) | fn summarize(&self) -> String {
  type NewsArticle (line 5) | pub struct NewsArticle {
  type SocialPost (line 18) | pub struct SocialPost {

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/src/lib.rs
  type Summary (line 1) | pub trait Summary {
    method summarize (line 2) | fn summarize(&self) -> String {
    method summarize (line 24) | fn summarize(&self) -> String {
  type NewsArticle (line 7) | pub struct NewsArticle {
  type SocialPost (line 16) | pub struct SocialPost {

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/src/lib.rs
  type Summary (line 2) | pub trait Summary {
    method summarize_author (line 3) | fn summarize_author(&self) -> String;
    method summarize (line 5) | fn summarize(&self) -> String {
    method summarize_author (line 20) | fn summarize_author(&self) -> String {
  type SocialPost (line 11) | pub struct SocialPost {

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/src/lib.rs
  type Summary (line 1) | pub trait Summary {
    method summarize (line 2) | fn summarize(&self) -> String;
    method summarize (line 13) | fn summarize(&self) -> String {
    method summarize (line 26) | fn summarize(&self) -> String {
  type NewsArticle (line 5) | pub struct NewsArticle {
  type SocialPost (line 18) | pub struct SocialPost {
  function notify (line 32) | pub fn notify(item: &impl Summary) {

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/src/lib.rs
  type Summary (line 1) | pub trait Summary {
    method summarize (line 2) | fn summarize(&self) -> String;
    method summarize (line 13) | fn summarize(&self) -> String {
    method summarize (line 26) | fn summarize(&self) -> String {
  type NewsArticle (line 5) | pub struct NewsArticle {
  type SocialPost (line 18) | pub struct SocialPost {
  function returns_summarizable (line 32) | fn returns_summarizable() -> impl Summary {

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/src/lib.rs
  type Summary (line 1) | pub trait Summary {
    method summarize (line 2) | fn summarize(&self) -> String;
    method summarize (line 13) | fn summarize(&self) -> String {
    method summarize (line 26) | fn summarize(&self) -> String {
  type NewsArticle (line 5) | pub struct NewsArticle {
  type SocialPost (line 18) | pub struct SocialPost {
  function returns_summarizable (line 32) | fn returns_summarizable(switch: bool) -> impl Summary {

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-07-where-clause/src/lib.rs
  function some_function (line 2) | fn some_function<T, U>(t: &T, u: &U) -> i32

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/src/main.rs
  function main (line 1) | fn main() {
  function longest (line 10) | fn longest<'a>(x: &'a str, y: &str) -> &'a str {

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/src/main.rs
  function main (line 1) | fn main() {
  function longest (line 10) | fn longest<'a>(x: &str, y: &str) -> &'a str {

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/src/main.rs
  type ImportantExcerpt (line 1) | struct ImportantExcerpt<'a> {
  function level (line 7) | fn level(&self) -> i32 {
  function announce_and_return_part (line 15) | fn announce_and_return_part(&self, announcement: &str) -> &str {
  function main (line 22) | fn main() {

FILE: listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/src/main.rs
  function main (line 1) | fn main() {
  function longest_with_an_announcement (line 16) | fn longest_with_an_announcement<'a, T>(

FILE: listings/ch11-writing-automated-tests/listing-11-01/src/lib.rs
  function add (line 1) | pub fn add(left: u64, right: u64) -> u64 {
  function it_works (line 10) | fn it_works() {

FILE: listings/ch11-writing-automated-tests/listing-11-03/src/lib.rs
  function add (line 1) | pub fn add(left: u64, right: u64) -> u64 {
  function exploration (line 10) | fn exploration() {
  function another (line 16) | fn another() {

FILE: listings/ch11-writing-automated-tests/listing-11-05/src/lib.rs
  type Rectangle (line 2) | struct Rectangle {
    method can_hold (line 8) | fn can_hold(&self, other: &Rectangle) -> bool {

FILE: listings/ch11-writing-automated-tests/listing-11-06/src/lib.rs
  type Rectangle (line 2) | struct Rectangle {
    method can_hold (line 8) | fn can_hold(&self, other: &Rectangle) -> bool {
  function larger_can_hold_smaller (line 19) | fn larger_can_hold_smaller() {

FILE: listings/ch11-writing-automated-tests/listing-11-07/src/lib.rs
  function add_two (line 1) | pub fn add_two(a: u64) -> u64 {
  function it_adds_two (line 10) | fn it_adds_two() {

FILE: listings/ch11-writing-automated-tests/listing-11-08/src/lib.rs
  type Guess (line 1) | pub struct Guess {
    method new (line 6) | pub fn new(value: i32) -> Guess {
  function greater_than_100 (line 21) | fn greater_than_100() {

FILE: listings/ch11-writing-automated-tests/listing-11-09/src/lib.rs
  type Guess (line 1) | pub struct Guess {
    method new (line 9) | pub fn new(value: i32) -> Guess {
  function greater_than_100 (line 30) | fn greater_than_100() {

FILE: listings/ch11-writing-automated-tests/listing-11-10/src/lib.rs
  function prints_and_returns_10 (line 1) | fn prints_and_returns_10(a: i32) -> i32 {
  function this_test_will_pass (line 11) | fn this_test_will_pass() {
  function this_test_will_fail (line 17) | fn this_test_will_fail() {

FILE: listings/ch11-writing-automated-tests/listing-11-11/src/lib.rs
  function add_two (line 1) | pub fn add_two(a: u64) -> u64 {
  function add_two_and_two (line 10) | fn add_two_and_two() {
  function add_three_and_two (line 16) | fn add_three_and_two() {
  function one_hundred (line 22) | fn one_hundred() {

FILE: listings/ch11-writing-automated-tests/listing-11-12/src/lib.rs
  function add_two (line 1) | pub fn add_two(a: u64) -> u64 {
  function internal_adder (line 5) | fn internal_adder(left: u64, right: u64) -> u64 {
  function internal (line 14) | fn internal() {

FILE: listings/ch11-writing-automated-tests/listing-11-13/src/lib.rs
  function add_two (line 1) | pub fn add_two(a: usize) -> usize {
  function internal_adder (line 5) | fn internal_adder(left: usize, right: usize) -> usize {
  function internal (line 14) | fn internal() {

FILE: listings/ch11-writing-automated-tests/listing-11-13/tests/integration_test.rs
  function it_adds_two (line 4) | fn it_adds_two() {

FILE: listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/src/lib.rs
  function add (line 1) | pub fn add(left: u64, right: u64) -> u64 {
  function exploration (line 10) | fn exploration() {

FILE: listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/src/lib.rs
  type Rectangle (line 2) | struct Rectangle {
    method can_hold (line 8) | fn can_hold(&self, other: &Rectangle) -> bool {
  function larger_can_hold_smaller (line 19) | fn larger_can_hold_smaller() {
  function smaller_cannot_hold_larger (line 36) | fn smaller_cannot_hold_larger() {

FILE: listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/src/lib.rs
  type Rectangle (line 2) | struct Rectangle {
    method can_hold (line 10) | fn can_hold(&self, other: &Rectangle) -> bool {
  function larger_can_hold_smaller (line 21) | fn larger_can_hold_smaller() {
  function smaller_cannot_hold_larger (line 35) | fn smaller_cannot_hold_larger() {

FILE: listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/src/lib.rs
  function add_two (line 2) | pub fn add_two(a: u64) -> u64 {
  function it_adds_two (line 12) | fn it_adds_two() {

FILE: listings/ch11-writing-automated-tests/no-listing-05-greeter/src/lib.rs
  function greeting (line 1) | pub fn greeting(name: &str) -> String {
  function greeting_contains_name (line 10) | fn greeting_contains_name() {

FILE: listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/src/lib.rs
  function greeting (line 2) | pub fn greeting(name: &str) -> String {
  function greeting_contains_name (line 12) | fn greeting_contains_name() {

FILE: listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/src/lib.rs
  function greeting (line 1) | pub fn greeting(name: &str) -> String {
  function greeting_contains_name (line 11) | fn greeting_contains_name() {

FILE: listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/src/lib.rs
  type Guess (line 1) | pub struct Guess {
    method new (line 8) | pub fn new(value: i32) -> Guess {
  function greater_than_100 (line 24) | fn greater_than_100() {

FILE: listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/src/lib.rs
  type Guess (line 1) | pub struct Guess {
    method new (line 6) | pub fn new(value: i32) -> Guess {
  function greater_than_100 (line 29) | fn greater_than_100() {

FILE: listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/src/lib.rs
  function add (line 1) | pub fn add(left: u64, right: u64) -> u64 {
  function it_works (line 11) | fn it_works() -> Result<(), String> {

FILE: listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/src/lib.rs
  function add (line 1) | pub fn add(left: u64, right: u64) -> u64 {
  function it_works (line 11) | fn it_works() {
  function expensive_test (line 18) | fn expensive_test() {

FILE: listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/src/lib.rs
  function add_two (line 1) | pub fn add_two(a: usize) -> usize {
  function internal_adder (line 5) | fn internal_adder(left: usize, right: usize) -> usize {
  function internal (line 14) | fn internal() {

FILE: listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/tests/common.rs
  function setup (line 1) | pub fn setup() {

FILE: listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/tests/integration_test.rs
  function it_adds_two (line 4) | fn it_adds_two() {

FILE: listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/src/lib.rs
  function add_two (line 1) | pub fn add_two(a: usize) -> usize {
  function internal_adder (line 5) | fn internal_adder(left: usize, right: usize) -> usize {
  function internal (line 14) | fn internal() {

FILE: listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/tests/common/mod.rs
  function setup (line 1) | pub fn setup() {

FILE: listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/tests/integration_test.rs
  function it_adds_two (line 6) | fn it_adds_two() {

FILE: listings/ch11-writing-automated-tests/output-only-01-show-output/src/lib.rs
  function prints_and_returns_10 (line 1) | pub fn prints_and_returns_10(a: i32) -> i32 {
  function this_test_will_pass (line 11) | fn this_test_will_pass() {
  function this_test_will_fail (line 17) | fn this_test_will_fail() {

FILE: listings/ch11-writing-automated-tests/output-only-02-single-test/src/lib.rs
  function add_two (line 1) | pub fn add_two(a: i32) -> i32 {
  function add_two_and_two (line 10) | fn add_two_and_two() {
  function add_three_and_two (line 15) | fn add_three_and_two() {
  function one_hundred (line 20) | fn one_hundred() {

FILE: listings/ch11-writing-automated-tests/output-only-03-multiple-tests/src/lib.rs
  function add_two (line 1) | pub fn add_two(a: i32) -> i32 {
  function add_two_and_two (line 10) | fn add_two_and_two() {
  function add_three_and_two (line 15) | fn add_three_and_two() {
  function one_hundred (line 20) | fn one_hundred() {

FILE: listings/ch11-writing-automated-tests/output-only-04-running-ignored/src/lib.rs
  function add (line 1) | pub fn add(left: u64, right: u64) -> u64 {
  function it_works (line 11) | fn it_works() {
  function expensive_test (line 18) | fn expensive_test() {

FILE: listings/ch11-writing-automated-tests/output-only-05-single-integration/src/lib.rs
  function add_two (line 1) | pub fn add_two(a: usize) -> usize {
  function internal_adder (line 5) | fn internal_adder(left: usize, right: usize) -> usize {
  function internal (line 14) | fn internal() {

FILE: listings/ch11-writing-automated-tests/output-only-05-single-integration/tests/integration_test.rs
  function it_adds_two (line 4) | fn it_adds_two() {

FILE: listings/ch12-an-io-project/listing-12-01/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch12-an-io-project/listing-12-02/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch12-an-io-project/listing-12-03/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch12-an-io-project/listing-12-04/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch12-an-io-project/listing-12-05/src/main.rs
  function main (line 5) | fn main() {
  function parse_config (line 23) | fn parse_config(args: &[String]) -> (&str, &str) {

FILE: listings/ch12-an-io-project/listing-12-06/src/main.rs
  function main (line 5) | fn main() {
  type Config (line 23) | struct Config {
  function parse_config (line 28) | fn parse_config(args: &[String]) -> Config {

FILE: listings/ch12-an-io-project/listing-12-07/src/main.rs
  function main (line 5) | fn main() {
  type Config (line 26) | struct Config {
    method new (line 33) | fn new(args: &[String]) -> Config {

FILE: listings/ch12-an-io-project/listing-12-08/src/main.rs
  function main (line 4) | fn main() {
  type Config (line 18) | struct Config {
    method new (line 26) | fn new(args: &[String]) -> Config {

FILE: listings/ch12-an-io-project/listing-12-09/src/main.rs
  function main (line 4) | fn main() {
  type Config (line 18) | struct Config {
    method build (line 25) | fn build(args: &[String]) -> Result<Config, &'static str> {

FILE: listings/ch12-an-io-project/listing-12-10/src/main.rs
  function main (line 6) | fn main() {
  type Config (line 26) | struct Config {
    method build (line 32) | fn build(args: &[String]) -> Result<Config, &'static str> {

FILE: listings/ch12-an-io-project/listing-12-11/src/main.rs
  function main (line 6) | fn main() {
  function run (line 24) | fn run(config: Config) {
  type Config (line 34) | struct Config {
    method build (line 40) | fn build(args: &[String]) -> Result<Config, &'static str> {

FILE: listings/ch12-an-io-project/listing-12-12/src/main.rs
  function main (line 11) | fn main() {
  function run (line 26) | fn run(config: Config) -> Result<(), Box<dyn Error>> {
  type Config (line 35) | struct Config {
    method build (line 41) | fn build(args: &[String]) -> Result<Config, &'static str> {

FILE: listings/ch12-an-io-project/listing-12-13/src/lib.rs
  function search (line 1) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {

FILE: listings/ch12-an-io-project/listing-12-13/src/main.rs
  function main (line 6) | fn main() {
  type Config (line 23) | struct Config {
    method build (line 29) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 41) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch12-an-io-project/listing-12-14/src/lib.rs
  function search (line 1) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {

FILE: listings/ch12-an-io-project/listing-12-14/src/main.rs
  function main (line 10) | fn main() {
  type Config (line 31) | struct Config {
    method build (line 37) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 50) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch12-an-io-project/listing-12-15/src/lib.rs
  function search (line 1) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function one_result (line 13) | fn one_result() {

FILE: listings/ch12-an-io-project/listing-12-15/src/main.rs
  function main (line 8) | fn main() {
  type Config (line 22) | struct Config {
    method build (line 28) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 40) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch12-an-io-project/listing-12-16/src/lib.rs
  function search (line 2) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function one_result (line 12) | fn one_result() {

FILE: listings/ch12-an-io-project/listing-12-16/src/main.rs
  function main (line 8) | fn main() {
  type Config (line 22) | struct Config {
    method build (line 28) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 40) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch12-an-io-project/listing-12-17/src/lib.rs
  function search (line 2) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function one_result (line 14) | fn one_result() {

FILE: listings/ch12-an-io-project/listing-12-17/src/main.rs
  function main (line 8) | fn main() {
  type Config (line 22) | struct Config {
    method build (line 28) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 40) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch12-an-io-project/listing-12-18/src/lib.rs
  function search (line 2) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function one_result (line 16) | fn one_result() {

FILE: listings/ch12-an-io-project/listing-12-18/src/main.rs
  function main (line 8) | fn main() {
  type Config (line 22) | struct Config {
    method build (line 28) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 40) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch12-an-io-project/listing-12-19/src/lib.rs
  function search (line 3) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function one_result (line 22) | fn one_result() {

FILE: listings/ch12-an-io-project/listing-12-19/src/main.rs
  function main (line 8) | fn main() {
  type Config (line 22) | struct Config {
    method build (line 28) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 40) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch12-an-io-project/listing-12-20/src/lib.rs
  function search (line 1) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function case_sensitive (line 19) | fn case_sensitive() {
  function case_insensitive (line 31) | fn case_insensitive() {

FILE: listings/ch12-an-io-project/listing-12-20/src/main.rs
  function main (line 8) | fn main() {
  type Config (line 22) | struct Config {
    method build (line 28) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 40) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch12-an-io-project/listing-12-21/src/lib.rs
  function search (line 1) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function search_case_insensitive (line 14) | pub fn search_case_insensitive<'a>(
  function case_sensitive (line 36) | fn case_sensitive() {
  function case_insensitive (line 48) | fn case_insensitive() {

FILE: listings/ch12-an-io-project/listing-12-21/src/main.rs
  function main (line 8) | fn main() {
  type Config (line 22) | struct Config {
    method build (line 28) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 40) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch12-an-io-project/listing-12-22/src/lib.rs
  function search (line 1) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function search_case_insensitive (line 14) | pub fn search_case_insensitive<'a>(
  function case_sensitive (line 36) | fn case_sensitive() {
  function case_insensitive (line 48) | fn case_insensitive() {

FILE: listings/ch12-an-io-project/listing-12-22/src/main.rs
  function main (line 13) | fn main() {
  type Config (line 28) | pub struct Config {
    method build (line 36) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 49) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch12-an-io-project/listing-12-23/src/lib.rs
  function search (line 1) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function search_case_insensitive (line 13) | pub fn search_case_insensitive<'a>(
  function case_sensitive (line 34) | fn case_sensitive() {
  function case_insensitive (line 46) | fn case_insensitive() {

FILE: listings/ch12-an-io-project/listing-12-23/src/main.rs
  function main (line 8) | fn main() {
  type Config (line 22) | pub struct Config {
    method build (line 30) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 49) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch12-an-io-project/listing-12-24/src/lib.rs
  function search (line 1) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function search_case_insensitive (line 13) | pub fn search_case_insensitive<'a>(
  function case_sensitive (line 34) | fn case_sensitive() {
  function case_insensitive (line 46) | fn case_insensitive() {

FILE: listings/ch12-an-io-project/listing-12-24/src/main.rs
  function main (line 9) | fn main() {
  type Config (line 24) | pub struct Config {
    method build (line 31) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 49) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/src/main.rs
  function main (line 7) | fn main() {
  function run (line 29) | fn run(config: Config) -> Result<(), Box<dyn Error>> {
  type Config (line 37) | struct Config {
    method build (line 43) | fn build(args: &[String]) -> Result<Config, &'static str> {

FILE: listings/ch12-an-io-project/no-listing-02-using-search-in-run/src/lib.rs
  type Config (line 4) | pub struct Config {
    method build (line 10) | pub fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 23) | pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
  function search (line 34) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function one_result (line 51) | fn one_result() {

FILE: listings/ch12-an-io-project/no-listing-02-using-search-in-run/src/main.rs
  function main (line 6) | fn main() {

FILE: listings/ch12-an-io-project/output-only-01-with-args/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch12-an-io-project/output-only-02-missing-lifetimes/src/lib.rs
  function search (line 1) | pub fn search(query: &str, contents: &str) -> Vec<&str> {
  function one_result (line 11) | fn one_result() {

FILE: listings/ch12-an-io-project/output-only-02-missing-lifetimes/src/main.rs
  function main (line 8) | fn main() {
  type Config (line 22) | struct Config {
    method build (line 28) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 40) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch12-an-io-project/output-only-03-multiple-matches/src/lib.rs
  type Config (line 4) | pub struct Config {
    method build (line 10) | pub fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 23) | pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
  function search (line 34) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function one_result (line 51) | fn one_result() {

FILE: listings/ch12-an-io-project/output-only-03-multiple-matches/src/main.rs
  function main (line 6) | fn main() {

FILE: listings/ch12-an-io-project/output-only-04-no-matches/src/lib.rs
  type Config (line 4) | pub struct Config {
    method build (line 10) | pub fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 23) | pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
  function search (line 34) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function one_result (line 51) | fn one_result() {

FILE: listings/ch12-an-io-project/output-only-04-no-matches/src/main.rs
  function main (line 6) | fn main() {

FILE: listings/ch13-functional-features/listing-12-23-reproduced/src/lib.rs
  function search (line 1) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function search_case_insensitive (line 13) | pub fn search_case_insensitive<'a>(
  function case_sensitive (line 34) | fn case_sensitive() {
  function case_insensitive (line 46) | fn case_insensitive() {

FILE: listings/ch13-functional-features/listing-12-23-reproduced/src/main.rs
  function main (line 8) | fn main() {
  type Config (line 22) | pub struct Config {
    method build (line 30) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 49) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch13-functional-features/listing-12-24-reproduced/src/lib.rs
  function search (line 1) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function search_case_insensitive (line 13) | pub fn search_case_insensitive<'a>(
  function case_sensitive (line 34) | fn case_sensitive() {
  function case_insensitive (line 46) | fn case_insensitive() {

FILE: listings/ch13-functional-features/listing-12-24-reproduced/src/main.rs
  function main (line 9) | fn main() {
  type Config (line 28) | pub struct Config {
    method build (line 35) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 53) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch13-functional-features/listing-13-01/src/main.rs
  type ShirtColor (line 2) | enum ShirtColor {
  type Inventory (line 7) | struct Inventory {
    method giveaway (line 12) | fn giveaway(&self, user_preference: Option<ShirtColor>) -> ShirtColor {
    method most_stocked (line 16) | fn most_stocked(&self) -> ShirtColor {
  function main (line 34) | fn main() {

FILE: listings/ch13-functional-features/listing-13-02/src/main.rs
  function generate_workout (line 4) | fn generate_workout(intensity: u32, random_number: u32) {
  function main (line 28) | fn main() {

FILE: listings/ch13-functional-features/listing-13-03/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch13-functional-features/listing-13-04/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch13-functional-features/listing-13-05/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch13-functional-features/listing-13-06/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch13-functional-features/listing-13-07/src/main.rs
  type Rectangle (line 2) | struct Rectangle {
  function main (line 7) | fn main() {

FILE: listings/ch13-functional-features/listing-13-08/src/main.rs
  type Rectangle (line 2) | struct Rectangle {
  function main (line 7) | fn main() {

FILE: listings/ch13-functional-features/listing-13-09/src/main.rs
  type Rectangle (line 2) | struct Rectangle {
  function main (line 7) | fn main() {

FILE: listings/ch13-functional-features/listing-13-10/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch13-functional-features/listing-13-11/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch13-functional-features/listing-13-12/src/lib.rs
  function iterator_demonstration (line 5) | fn iterator_demonstration() {

FILE: listings/ch13-functional-features/listing-13-13/src/lib.rs
  function iterator_sum (line 5) | fn iterator_sum() {

FILE: listings/ch13-functional-features/listing-13-14/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch13-functional-features/listing-13-15/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch13-functional-features/listing-13-16/src/lib.rs
  type Shoe (line 2) | struct Shoe {
  function shoes_in_size (line 7) | fn shoes_in_size(shoes: Vec<Shoe>, shoe_size: u32) -> Vec<Shoe> {
  function filters_by_size (line 16) | fn filters_by_size() {

FILE: listings/ch13-functional-features/listing-13-18/src/lib.rs
  function search (line 1) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function search_case_insensitive (line 13) | pub fn search_case_insensitive<'a>(
  function case_sensitive (line 34) | fn case_sensitive() {
  function case_insensitive (line 46) | fn case_insensitive() {

FILE: listings/ch13-functional-features/listing-13-18/src/main.rs
  function main (line 9) | fn main() {
  type Config (line 26) | pub struct Config {
    method build (line 33) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 51) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch13-functional-features/listing-13-19/src/lib.rs
  function search (line 1) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function search_case_insensitive (line 13) | pub fn search_case_insensitive<'a>(
  function case_sensitive (line 34) | fn case_sensitive() {
  function case_insensitive (line 46) | fn case_insensitive() {

FILE: listings/ch13-functional-features/listing-13-19/src/main.rs
  function main (line 8) | fn main() {
  type Config (line 20) | pub struct Config {
    method build (line 28) | fn build(
  function run (line 50) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch13-functional-features/listing-13-20/src/lib.rs
  function search (line 1) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function search_case_insensitive (line 13) | pub fn search_case_insensitive<'a>(
  function case_sensitive (line 34) | fn case_sensitive() {
  function case_insensitive (line 46) | fn case_insensitive() {

FILE: listings/ch13-functional-features/listing-13-20/src/main.rs
  function main (line 8) | fn main() {
  type Config (line 20) | pub struct Config {
    method build (line 28) | fn build(
  function run (line 54) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch13-functional-features/listing-13-22/src/lib.rs
  function search (line 2) | pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
  function search_case_insensitive (line 10) | pub fn search_case_insensitive<'a>(
  function case_sensitive (line 31) | fn case_sensitive() {
  function case_insensitive (line 43) | fn case_insensitive() {

FILE: listings/ch13-functional-features/listing-13-22/src/main.rs
  function main (line 8) | fn main() {
  type Config (line 22) | struct Config {
    method build (line 28) | fn build(args: &[String]) -> Result<Config, &'static str> {
  function run (line 40) | fn run(config: Config) -> Result<(), Box<dyn Error>> {

FILE: listings/ch14-more-about-cargo/listing-14-01/src/lib.rs
  function add_one (line 11) | pub fn add_one(x: i32) -> i32 {

FILE: listings/ch14-more-about-cargo/listing-14-02/src/lib.rs
  function add_one (line 19) | pub fn add_one(x: i32) -> i32 {

FILE: listings/ch14-more-about-cargo/listing-14-03/src/lib.rs
  type PrimaryColor (line 8) | pub enum PrimaryColor {
  type SecondaryColor (line 15) | pub enum SecondaryColor {
  function mix (line 27) | pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {

FILE: listings/ch14-more-about-cargo/listing-14-04/src/lib.rs
  type PrimaryColor (line 7) | pub enum PrimaryColor {
  type SecondaryColor (line 14) | pub enum SecondaryColor {
  function mix (line 26) | pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {

FILE: listings/ch14-more-about-cargo/listing-14-04/src/main.rs
  function main (line 4) | fn main() {

FILE: listings/ch14-more-about-cargo/listing-14-05/src/lib.rs
  type PrimaryColor (line 14) | pub enum PrimaryColor {
  type SecondaryColor (line 21) | pub enum SecondaryColor {
  function mix (line 36) | pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {

FILE: listings/ch14-more-about-cargo/listing-14-06/src/lib.rs
  type PrimaryColor (line 11) | pub enum PrimaryColor {
  type SecondaryColor (line 18) | pub enum SecondaryColor {
  function mix (line 30) | pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {

FILE: listings/ch14-more-about-cargo/listing-14-06/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch14-more-about-cargo/listing-14-07/add/add_one/src/lib.rs
  function add_one (line 1) | pub fn add_one(x: i32) -> i32 {

FILE: listings/ch14-more-about-cargo/listing-14-07/add/adder/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/add_one/src/lib.rs
  function add_one (line 1) | pub fn add_one(x: i32) -> i32 {

FILE: listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/adder/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/add_one/src/lib.rs
  function add_one (line 3) | pub fn add_one(x: i32) -> i32 {

FILE: listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/adder/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/add_one/src/lib.rs
  function add_one (line 1) | pub fn add_one(x: i32) -> i32 {
  function it_works (line 10) | fn it_works() {

FILE: listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/adder/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch14-more-about-cargo/output-only-02-add-one/add/add_one/src/lib.rs
  function add (line 1) | pub fn add(left: u64, right: u64) -> u64 {
  function it_works (line 10) | fn it_works() {

FILE: listings/ch14-more-about-cargo/output-only-02-add-one/add/adder/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch14-more-about-cargo/output-only-03-use-rand/add/add_one/src/lib.rs
  function add_one (line 3) | pub fn add_one(x: i32) -> i32 {

FILE: listings/ch14-more-about-cargo/output-only-03-use-rand/add/adder/src/main.rs
  function main (line 4) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-01/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-02/src/main.rs
  type List (line 2) | enum List {
  function main (line 8) | fn main() {}

FILE: listings/ch15-smart-pointers/listing-15-03/src/main.rs
  type List (line 1) | enum List {
  function main (line 11) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-05/src/main.rs
  type List (line 1) | enum List {
  function main (line 8) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-06/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-07/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-08/src/main.rs
  type MyBox (line 2) | struct MyBox<T>(T);
  function new (line 5) | fn new(x: T) -> MyBox<T> {
  function main (line 11) | fn main() {}

FILE: listings/ch15-smart-pointers/listing-15-09/src/main.rs
  type MyBox (line 1) | struct MyBox<T>(T);
  function new (line 4) | fn new(x: T) -> MyBox<T> {
  function main (line 10) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-10/src/main.rs
  type Target (line 5) | type Target = T;
  method deref (line 7) | fn deref(&self) -> &Self::Target {
  type MyBox (line 13) | struct MyBox<T>(T);
  function new (line 16) | fn new(x: T) -> MyBox<T> {
  function main (line 21) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-11/src/main.rs
  function hello (line 2) | fn hello(name: &str) {
  function main (line 7) | fn main() {}

FILE: listings/ch15-smart-pointers/listing-15-12/src/main.rs
  type Target (line 4) | type Target = T;
  method deref (line 6) | fn deref(&self) -> &T {
  type MyBox (line 11) | struct MyBox<T>(T);
  function new (line 14) | fn new(x: T) -> MyBox<T> {
  function hello (line 19) | fn hello(name: &str) {
  function main (line 24) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-13/src/main.rs
  type Target (line 4) | type Target = T;
  method deref (line 6) | fn deref(&self) -> &T {
  type MyBox (line 11) | struct MyBox<T>(T);
  function new (line 14) | fn new(x: T) -> MyBox<T> {
  function hello (line 19) | fn hello(name: &str) {
  function main (line 24) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-14/src/main.rs
  type CustomSmartPointer (line 1) | struct CustomSmartPointer {
  method drop (line 6) | fn drop(&mut self) {
  function main (line 11) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-15/src/main.rs
  type CustomSmartPointer (line 1) | struct CustomSmartPointer {
  method drop (line 6) | fn drop(&mut self) {
  function main (line 12) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-16/src/main.rs
  type CustomSmartPointer (line 1) | struct CustomSmartPointer {
  method drop (line 6) | fn drop(&mut self) {
  function main (line 12) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-17/src/main.rs
  type List (line 1) | enum List {
  function main (line 8) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-18/src/main.rs
  type List (line 1) | enum List {
  function main (line 9) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-19/src/main.rs
  type List (line 1) | enum List {
  function main (line 12) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-20/src/lib.rs
  type Messenger (line 1) | pub trait Messenger {
    method send (line 2) | fn send(&self, msg: &str);
  type LimitTracker (line 5) | pub struct LimitTracker<'a, T: Messenger> {
  function new (line 15) | pub fn new(messenger: &'a T, max: usize) -> LimitTracker<'a, T> {
  function set_value (line 23) | pub fn set_value(&mut self, value: usize) {

FILE: listings/ch15-smart-pointers/listing-15-21/src/lib.rs
  type Messenger (line 1) | pub trait Messenger {
    method send (line 2) | fn send(&self, msg: &str);
    method send (line 58) | fn send(&self, message: &str) {
  type LimitTracker (line 5) | pub struct LimitTracker<'a, T: Messenger> {
  function new (line 15) | pub fn new(messenger: &'a T, max: usize) -> LimitTracker<'a, T> {
  function set_value (line 23) | pub fn set_value(&mut self, value: usize) {
  type MockMessenger (line 45) | struct MockMessenger {
    method new (line 50) | fn new() -> MockMessenger {
  function it_sends_an_over_75_percent_warning_message (line 64) | fn it_sends_an_over_75_percent_warning_message() {

FILE: listings/ch15-smart-pointers/listing-15-22/src/lib.rs
  type Messenger (line 1) | pub trait Messenger {
    method send (line 2) | fn send(&self, msg: &str);
    method send (line 59) | fn send(&self, message: &str) {
  type LimitTracker (line 5) | pub struct LimitTracker<'a, T: Messenger> {
  function new (line 15) | pub fn new(messenger: &'a T, max: usize) -> LimitTracker<'a, T> {
  function set_value (line 23) | pub fn set_value(&mut self, value: usize) {
  type MockMessenger (line 46) | struct MockMessenger {
    method new (line 51) | fn new() -> MockMessenger {
  function it_sends_an_over_75_percent_warning_message (line 65) | fn it_sends_an_over_75_percent_warning_message() {

FILE: listings/ch15-smart-pointers/listing-15-23/src/lib.rs
  type Messenger (line 1) | pub trait Messenger {
    method send (line 2) | fn send(&self, msg: &str);
    method send (line 59) | fn send(&self, message: &str) {
  type LimitTracker (line 5) | pub struct LimitTracker<'a, T: Messenger> {
  function new (line 15) | pub fn new(messenger: &'a T, max: usize) -> LimitTracker<'a, T> {
  function set_value (line 23) | pub fn set_value(&mut self, value: usize) {
  type MockMessenger (line 45) | struct MockMessenger {
    method new (line 50) | fn new() -> MockMessenger {
  function it_sends_an_over_75_percent_warning_message (line 70) | fn it_sends_an_over_75_percent_warning_message() {

FILE: listings/ch15-smart-pointers/listing-15-24/src/main.rs
  type List (line 2) | enum List {
  function main (line 11) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-25/src/main.rs
  type List (line 7) | enum List {
    method tail (line 13) | fn tail(&self) -> Option<&RefCell<Rc<List>>> {
  function main (line 22) | fn main() {}

FILE: listings/ch15-smart-pointers/listing-15-26/src/main.rs
  type List (line 6) | enum List {
    method tail (line 12) | fn tail(&self) -> Option<&RefCell<Rc<List>>> {
  function main (line 21) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-27/src/main.rs
  type Node (line 6) | struct Node {
  function main (line 13) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-28/src/main.rs
  type Node (line 6) | struct Node {
  function main (line 14) | fn main() {

FILE: listings/ch15-smart-pointers/listing-15-29/src/main.rs
  type Node (line 5) | struct Node {
  function main (line 12) | fn main() {

FILE: listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch15-smart-pointers/output-only-01-comparing-to-reference/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-01/src/main.rs
  function main (line 4) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-02/src/main.rs
  function main (line 4) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-03/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-04/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-05/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-06/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-07/src/main.rs
  function main (line 4) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-08/src/main.rs
  function main (line 4) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-09/src/main.rs
  function main (line 4) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-10/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-11/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-12/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-13/src/main.rs
  function main (line 4) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-14/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch16-fearless-concurrency/listing-16-15/src/main.rs
  function main (line 4) | fn main() {

FILE: listings/ch16-fearless-concurrency/no-listing-01-join-too-early/src/main.rs
  function main (line 4) | fn main() {

FILE: listings/ch16-fearless-concurrency/no-listing-02-no-loop-to-understand-error/src/main.rs
  function main (line 4) | fn main() {

FILE: listings/ch16-fearless-concurrency/output-only-01-move-drop/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch17-async-await/listing-17-01/src/main.rs
  function main (line 3) | fn main() {
  function page_title (line 10) | async fn page_title(url: &str) -> Option<String> {

FILE: listings/ch17-async-await/listing-17-02/src/main.rs
  function main (line 5) | fn main() {
  function page_title (line 9) | async fn page_title(url: &str) -> Option<String> {

FILE: listings/ch17-async-await/listing-17-03/src/main.rs
  function main (line 6) | async fn main() {
  function page_title (line 16) | async fn page_title(url: &str) -> Option<String> {

FILE: listings/ch17-async-await/listing-17-04/src/main.rs
  function main (line 6) | fn main() {
  function page_title (line 19) | async fn page_title(url: &str) -> Option<String> {

FILE: listings/ch17-async-await/listing-17-05/src/main.rs
  function main (line 6) | fn main() {
  function page_title (line 27) | async fn page_title(url: &str) -> (&str, Option<String>) {

FILE: listings/ch17-async-await/listing-17-06/src/main.rs
  function main (line 6) | fn main() {

FILE: listings/ch17-async-await/listing-17-07/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch17-async-await/listing-17-08/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch17-async-await/listing-17-09/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch17-async-await/listing-17-10/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch17-async-await/listing-17-11/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch17-async-await/listing-17-12/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch17-async-await/listing-17-13/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch17-async-await/listing-17-14/src/main.rs
  function main (line 5) | fn main() {
  function slow (line 12) | fn slow(name: &str, ms: u64) {

FILE: listings/ch17-async-await/listing-17-15/src/main.rs
  function main (line 5) | fn main() {
  function slow (line 32) | fn slow(name: &str, ms: u64) {

FILE: listings/ch17-async-await/listing-17-16/src/main.rs
  function main (line 5) | fn main() {
  function slow (line 39) | fn slow(name: &str, ms: u64) {

FILE: listings/ch17-async-await/listing-17-17/src/main.rs
  function main (line 5) | fn main() {
  function slow (line 37) | fn slow(name: &str, ms: u64) {

FILE: listings/ch17-async-await/listing-17-18/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch17-async-await/listing-17-19/src/main.rs
  function main (line 5) | fn main() {
  function timeout (line 22) | async fn timeout<F: Future>(

FILE: listings/ch17-async-await/listing-17-20/src/main.rs
  function main (line 11) | fn main() {
  function timeout (line 28) | async fn timeout<F: Future>(

FILE: listings/ch17-async-await/listing-17-21/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch17-async-await/listing-17-22/src/main.rs
  function main (line 6) | fn main() {

FILE: listings/ch17-async-await/listing-17-23/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch17-async-await/listing-17-24/src/main.rs
  function main (line 11) | fn main() {

FILE: listings/ch17-async-await/listing-17-25/src/main.rs
  function main (line 6) | fn main() {

FILE: listings/ch17-async-await/no-listing-state-machine/src/lib.rs
  type PageTitleFuture (line 4) | enum PageTitleFuture<'a> {

FILE: listings/ch17-async-await/no-listing-stream-ext/src/lib.rs
  type Stream (line 4) | trait Stream {
    method poll_next (line 6) | fn poll_next(
  type StreamExt (line 13) | trait StreamExt: Stream {
    method next (line 14) | async fn next(&mut self) -> Option<Self::Item>

FILE: listings/ch18-oop/listing-18-01/src/lib.rs
  type AveragedCollection (line 1) | pub struct AveragedCollection {

FILE: listings/ch18-oop/listing-18-02/src/lib.rs
  type AveragedCollection (line 1) | pub struct AveragedCollection {
    method add (line 8) | pub fn add(&mut self, value: i32) {
    method remove (line 13) | pub fn remove(&mut self) -> Option<i32> {
    method average (line 24) | pub fn average(&self) -> f64 {
    method update_average (line 28) | fn update_average(&mut self) {

FILE: listings/ch18-oop/listing-18-03/src/lib.rs
  type Draw (line 1) | pub trait Draw {
    method draw (line 2) | fn draw(&self);

FILE: listings/ch18-oop/listing-18-04/src/lib.rs
  type Draw (line 1) | pub trait Draw {
    method draw (line 2) | fn draw(&self);
  type Screen (line 6) | pub struct Screen {

FILE: listings/ch18-oop/listing-18-05/src/lib.rs
  type Draw (line 1) | pub trait Draw {
    method draw (line 2) | fn draw(&self);
  type Screen (line 5) | pub struct Screen {
    method run (line 11) | pub fn run(&self) {

FILE: listings/ch18-oop/listing-18-06/src/lib.rs
  type Draw (line 1) | pub trait Draw {
    method draw (line 2) | fn draw(&self);
  type Screen (line 6) | pub struct Screen<T: Draw> {
  function run (line 14) | pub fn run(&self) {

FILE: listings/ch18-oop/listing-18-07/src/lib.rs
  type Draw (line 1) | pub trait Draw {
    method draw (line 2) | fn draw(&self);
    method draw (line 25) | fn draw(&self) {
  type Screen (line 5) | pub struct Screen {
    method run (line 10) | pub fn run(&self) {
  type Button (line 18) | pub struct Button {

FILE: listings/ch18-oop/listing-18-08/src/lib.rs
  type Draw (line 1) | pub trait Draw {
    method draw (line 2) | fn draw(&self);
    method draw (line 24) | fn draw(&self) {
  type Screen (line 5) | pub struct Screen {
    method run (line 10) | pub fn run(&self) {
  type Button (line 17) | pub struct Button {

FILE: listings/ch18-oop/listing-18-08/src/main.rs
  type SelectBox (line 4) | struct SelectBox {
  method draw (line 11) | fn draw(&self) {
  function main (line 17) | fn main() {}

FILE: listings/ch18-oop/listing-18-09/src/lib.rs
  type Draw (line 1) | pub trait Draw {
    method draw (line 2) | fn draw(&self);
    method draw (line 24) | fn draw(&self) {
  type Screen (line 5) | pub struct Screen {
    method run (line 10) | pub fn run(&self) {
  type Button (line 17) | pub struct Button {

FILE: listings/ch18-oop/listing-18-09/src/main.rs
  type SelectBox (line 3) | struct SelectBox {
  method draw (line 10) | fn draw(&self) {
  function main (line 18) | fn main() {

FILE: listings/ch18-oop/listing-18-10/src/lib.rs
  type Draw (line 1) | pub trait Draw {
    method draw (line 2) | fn draw(&self);
    method draw (line 24) | fn draw(&self) {
  type Screen (line 5) | pub struct Screen {
    method run (line 10) | pub fn run(&self) {
  type Button (line 17) | pub struct Button {

FILE: listings/ch18-oop/listing-18-10/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch18-oop/listing-18-11/src/main.rs
  function main (line 5) | fn main() {

FILE: listings/ch18-oop/listing-18-12/src/lib.rs
  type Post (line 1) | pub struct Post {
    method new (line 7) | pub fn new() -> Post {
  type State (line 15) | trait State {}
  type Draft (line 17) | struct Draft {}

FILE: listings/ch18-oop/listing-18-12/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch18-oop/listing-18-13/src/lib.rs
  type Post (line 1) | pub struct Post {
    method new (line 10) | pub fn new() -> Post {
    method add_text (line 18) | pub fn add_text(&mut self, text: &str) {
  type State (line 24) | trait State {}
  type Draft (line 26) | struct Draft {}

FILE: listings/ch18-oop/listing-18-13/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch18-oop/listing-18-14/src/lib.rs
  type Post (line 1) | pub struct Post {
    method new (line 10) | pub fn new() -> Post {
    method add_text (line 17) | pub fn add_text(&mut self, text: &str) {
    method content (line 22) | pub fn content(&self) -> &str {
  type State (line 28) | trait State {}
  type Draft (line 30) | struct Draft {}

FILE: listings/ch18-oop/listing-18-14/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch18-oop/listing-18-15/src/lib.rs
  type Post (line 1) | pub struct Post {
    method new (line 10) | pub fn new() -> Post {
    method add_text (line 17) | pub fn add_text(&mut self, text: &str) {
    method content (line 21) | pub fn content(&self) -> &str {
    method request_review (line 26) | pub fn request_review(&mut self) {
  type State (line 33) | trait State {
    method request_review (line 34) | fn request_review(self: Box<Self>) -> Box<dyn State>;
    method request_review (line 40) | fn request_review(self: Box<Self>) -> Box<dyn State> {
    method request_review (line 48) | fn request_review(self: Box<Self>) -> Box<dyn State> {
  type Draft (line 37) | struct Draft {}
  type PendingReview (line 45) | struct PendingReview {}

FILE: listings/ch18-oop/listing-18-15/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch18-oop/listing-18-16/src/lib.rs
  type Post (line 1) | pub struct Post {
    method new (line 10) | pub fn new() -> Post {
    method add_text (line 17) | pub fn add_text(&mut self, text: &str) {
    method content (line 21) | pub fn content(&self) -> &str {
    method request_review (line 25) | pub fn request_review(&mut self) {
    method approve (line 32) | pub fn approve(&mut self) {
  type State (line 39) | trait State {
    method request_review (line 40) | fn request_review(self: Box<Self>) -> Box<dyn State>;
    method approve (line 41) | fn approve(self: Box<Self>) -> Box<dyn State>;
    method request_review (line 49) | fn request_review(self: Box<Self>) -> Box<dyn State> {
    method approve (line 54) | fn approve(self: Box<Self>) -> Box<dyn State> {
    method request_review (line 64) | fn request_review(self: Box<Self>) -> Box<dyn State> {
    method approve (line 69) | fn approve(self: Box<Self>) -> Box<dyn State> {
    method request_review (line 77) | fn request_review(self: Box<Self>) -> Box<dyn State> {
    method approve (line 81) | fn approve(self: Box<Self>) -> Box<dyn State> {
  type Draft (line 44) | struct Draft {}
  type PendingReview (line 59) | struct PendingReview {}
  type Published (line 74) | struct Published {}

FILE: listings/ch18-oop/listing-18-16/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch18-oop/listing-18-17/src/lib.rs
  type Post (line 1) | pub struct Post {
    method new (line 10) | pub fn new() -> Post {
    method add_text (line 17) | pub fn add_text(&mut self, text: &str) {
    method content (line 22) | pub fn content(&self) -> &str {
    method request_review (line 28) | pub fn request_review(&mut self) {
    method approve (line 34) | pub fn approve(&mut self) {
  type State (line 43) | trait State {
    method request_review (line 44) | fn request_review(self: Box<Self>) -> Box<dyn State>;
    method approve (line 45) | fn approve(self: Box<Self>) -> Box<dyn State>;
    method request_review (line 51) | fn request_review(self: Box<Self>) -> Box<dyn State> {
    method approve (line 55) | fn approve(self: Box<Self>) -> Box<dyn State> {
    method request_review (line 63) | fn request_review(self: Box<Self>) -> Box<dyn State> {
    method approve (line 67) | fn approve(self: Box<Self>) -> Box<dyn State> {
    method request_review (line 75) | fn request_review(self: Box<Self>) -> Box<dyn State> {
    method approve (line 79) | fn approve(self: Box<Self>) -> Box<dyn State> {
  type Draft (line 48) | struct Draft {}
  type PendingReview (line 60) | struct PendingReview {}
  type Published (line 72) | struct Published {}

FILE: listings/ch18-oop/listing-18-17/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch18-oop/listing-18-18/src/lib.rs
  type Post (line 1) | pub struct Post {
    method new (line 7) | pub fn new() -> Post {
    method add_text (line 14) | pub fn add_text(&mut self, text: &str) {
    method content (line 18) | pub fn content(&self) -> &str {
    method request_review (line 22) | pub fn request_review(&mut self) {
    method approve (line 28) | pub fn approve(&mut self) {
  type State (line 36) | trait State {
    method request_review (line 39) | fn request_review(self: Box<Self>) -> Box<dyn State>;
    method approve (line 40) | fn approve(self: Box<Self>) -> Box<dyn State>;
    method content (line 43) | fn content<'a>(&self, post: &'a Post) -> &'a str {
    method request_review (line 54) | fn request_review(self: Box<Self>) -> Box<dyn State> {
    method approve (line 58) | fn approve(self: Box<Self>) -> Box<dyn State> {
    method request_review (line 66) | fn request_review(self: Box<Self>) -> Box<dyn State> {
    method approve (line 70) | fn approve(self: Box<Self>) -> Box<dyn State> {
    method request_review (line 81) | fn request_review(self: Box<Self>) -> Box<dyn State> {
    method approve (line 85) | fn approve(self: Box<Self>) -> Box<dyn State> {
    method content (line 90) | fn content<'a>(&self, post: &'a Post) -> &'a str {
  type Draft (line 51) | struct Draft {}
  type PendingReview (line 63) | struct PendingReview {}
  type Published (line 76) | struct Published {}

FILE: listings/ch18-oop/listing-18-18/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch18-oop/listing-18-19/src/lib.rs
  type Post (line 1) | pub struct Post {
    method new (line 10) | pub fn new() -> DraftPost {
    method content (line 16) | pub fn content(&self) -> &str {
  type DraftPost (line 5) | pub struct DraftPost {
    method add_text (line 22) | pub fn add_text(&mut self, text: &str) {

FILE: listings/ch18-oop/listing-18-20/src/lib.rs
  type Post (line 1) | pub struct Post {
    method new (line 10) | pub fn new() -> DraftPost {
    method content (line 16) | pub fn content(&self) -> &str {
  type DraftPost (line 5) | pub struct DraftPost {
    method add_text (line 25) | pub fn add_text(&mut self, text: &str) {
    method request_review (line 30) | pub fn request_review(self) -> PendingReviewPost {
  type PendingReviewPost (line 37) | pub struct PendingReviewPost {
    method approve (line 42) | pub fn approve(self) -> Post {

FILE: listings/ch18-oop/listing-18-21/src/lib.rs
  type Post (line 1) | pub struct Post {
    method new (line 10) | pub fn new() -> DraftPost {
    method content (line 16) | pub fn content(&self) -> &str {
  type DraftPost (line 5) | pub struct DraftPost {
    method add_text (line 22) | pub fn add_text(&mut self, text: &str) {
    method request_review (line 26) | pub fn request_review(self) -> PendingReviewPost {
  type PendingReviewPost (line 33) | pub struct PendingReviewPost {
    method approve (line 38) | pub fn approve(self) -> Post {

FILE: listings/ch18-oop/listing-18-21/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-01/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-02/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-03/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-04/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-05/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-06/src/main.rs
  function foo (line 2) | fn foo(x: i32) {
  function main (line 7) | fn main() {}

FILE: listings/ch19-patterns-and-matching/listing-19-07/src/main.rs
  function print_coordinates (line 1) | fn print_coordinates(&(x, y): &(i32, i32)) {
  function main (line 5) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-08/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-09/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-10/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-11/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-12/src/main.rs
  type Point (line 1) | struct Point {
  function main (line 6) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-13/src/main.rs
  type Point (line 1) | struct Point {
  function main (line 6) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-14/src/main.rs
  type Point (line 1) | struct Point {
  function main (line 7) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-15/src/main.rs
  type Message (line 1) | enum Message {
  function main (line 8) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-16/src/main.rs
  type Color (line 1) | enum Color {
  type Message (line 6) | enum Message {
  function main (line 13) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-17/src/main.rs
  function foo (line 1) | fn foo(_: i32, y: i32) {
  function main (line 5) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-18/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-19/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-20/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-21/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-22/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-23/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-24/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-25/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-26/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-27/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-28/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/listing-19-29/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/no-listing-01-literals/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/no-listing-03-ranges/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch19-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-01/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-02/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-03/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-04/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-05/src/main.rs
  function split_at_mut (line 2) | fn split_at_mut(values: &mut [i32], mid: usize) -> (&mut [i32], &mut [i3...
  function main (line 11) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-06/src/main.rs
  function split_at_mut (line 4) | fn split_at_mut(values: &mut [i32], mid: usize) -> (&mut [i32], &mut [i3...
  function main (line 19) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-07/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-08/src/main.rs
  function abs (line 2) | fn abs(input: i32) -> i32;
  function main (line 5) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-09/src/main.rs
  function abs (line 2) | fn abs(input: i32) -> i32;
  function main (line 5) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-10/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-11/src/main.rs
  function add_to_count (line 6) | unsafe fn add_to_count(inc: u32) {
  function main (line 12) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-12/src/main.rs
  type Foo (line 2) | unsafe trait Foo {
  function main (line 11) | fn main() {}

FILE: listings/ch20-advanced-features/listing-20-13/src/lib.rs
  type Iterator (line 1) | pub trait Iterator {
    method next (line 4) | fn next(&mut self) -> Option<Self::Item>;

FILE: listings/ch20-advanced-features/listing-20-14/src/lib.rs
  type Iterator (line 1) | pub trait Iterator<T> {
    method next (line 2) | fn next(&mut self) -> Option<T>;

FILE: listings/ch20-advanced-features/listing-20-15/src/main.rs
  type Point (line 4) | struct Point {
  type Output (line 10) | type Output = Point;
  method add (line 12) | fn add(self, other: Point) -> Point {
  function main (line 20) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-16/src/lib.rs
  type Millimeters (line 3) | struct Millimeters(u32);
    type Output (line 7) | type Output = Millimeters;
    method add (line 9) | fn add(self, other: Meters) -> Millimeters {
  type Meters (line 4) | struct Meters(u32);

FILE: listings/ch20-advanced-features/listing-20-17/src/main.rs
  type Pilot (line 2) | trait Pilot {
    method fly (line 3) | fn fly(&self);
    method fly (line 13) | fn fly(&self) {
  type Wizard (line 6) | trait Wizard {
    method fly (line 7) | fn fly(&self);
    method fly (line 19) | fn fly(&self) {
  type Human (line 10) | struct Human;
    method fly (line 25) | fn fly(&self) {
  function main (line 31) | fn main() {}

FILE: listings/ch20-advanced-features/listing-20-18/src/main.rs
  type Pilot (line 1) | trait Pilot {
    method fly (line 2) | fn fly(&self);
    method fly (line 12) | fn fly(&self) {
  type Wizard (line 5) | trait Wizard {
    method fly (line 6) | fn fly(&self);
    method fly (line 18) | fn fly(&self) {
  type Human (line 9) | struct Human;
    method fly (line 24) | fn fly(&self) {
  function main (line 30) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-19/src/main.rs
  type Pilot (line 1) | trait Pilot {
    method fly (line 2) | fn fly(&self);
    method fly (line 12) | fn fly(&self) {
  type Wizard (line 5) | trait Wizard {
    method fly (line 6) | fn fly(&self);
    method fly (line 18) | fn fly(&self) {
  type Human (line 9) | struct Human;
    method fly (line 24) | fn fly(&self) {
  function main (line 30) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-20/src/main.rs
  type Animal (line 1) | trait Animal {
    method baby_name (line 2) | fn baby_name() -> String;
    method baby_name (line 14) | fn baby_name() -> String {
  type Dog (line 5) | struct Dog;
    method baby_name (line 8) | fn baby_name() -> String {
  function main (line 19) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-21/src/main.rs
  type Animal (line 1) | trait Animal {
    method baby_name (line 2) | fn baby_name() -> String;
    method baby_name (line 14) | fn baby_name() -> String {
  type Dog (line 5) | struct Dog;
    method baby_name (line 8) | fn baby_name() -> String {
  function main (line 20) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-22/src/main.rs
  type Animal (line 1) | trait Animal {
    method baby_name (line 2) | fn baby_name() -> String;
    method baby_name (line 14) | fn baby_name() -> String {
  type Dog (line 5) | struct Dog;
    method baby_name (line 8) | fn baby_name() -> String {
  function main (line 20) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-23/src/main.rs
  type OutlinePrint (line 4) | trait OutlinePrint: fmt::Display {
    method outline_print (line 5) | fn outline_print(&self) {
  function main (line 17) | fn main() {}

FILE: listings/ch20-advanced-features/listing-20-24/src/main.rs
  type Wrapper (line 3) | struct Wrapper(Vec<String>);
    method fmt (line 6) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  function main (line 11) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-25/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-26/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-28/src/main.rs
  function add_one (line 1) | fn add_one(x: i32) -> i32 {
  function do_twice (line 5) | fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 {
  function main (line 9) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-29/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-30/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-31/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-32/src/lib.rs
  function returns_closure (line 1) | fn returns_closure() -> impl Fn(i32) -> i32 {

FILE: listings/ch20-advanced-features/listing-20-33/src/main.rs
  function main (line 1) | fn main() {
  function returns_closure (line 9) | fn returns_closure() -> impl Fn(i32) -> i32 {
  function returns_initialized_closure (line 13) | fn returns_initialized_closure(init: i32) -> impl Fn(i32) -> i32 {

FILE: listings/ch20-advanced-features/listing-20-34/src/main.rs
  function main (line 1) | fn main() {
  function returns_closure (line 10) | fn returns_closure() -> Box<dyn Fn(i32) -> i32> {
  function returns_initialized_closure (line 14) | fn returns_initialized_closure(init: i32) -> Box<dyn Fn(i32) -> i32> {

FILE: listings/ch20-advanced-features/listing-20-37/src/main.rs
  type Pancakes (line 5) | struct Pancakes;
  function main (line 7) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-38/hello_macro/src/lib.rs
  type HelloMacro (line 1) | pub trait HelloMacro {
    method hello_macro (line 2) | fn hello_macro();

FILE: listings/ch20-advanced-features/listing-20-39/hello_macro/src/lib.rs
  type HelloMacro (line 1) | pub trait HelloMacro {
    method hello_macro (line 2) | fn hello_macro();

FILE: listings/ch20-advanced-features/listing-20-39/pancakes/src/main.rs
  type Pancakes (line 3) | struct Pancakes;
  method hello_macro (line 6) | fn hello_macro() {
  function main (line 11) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-40/hello_macro/hello_macro_derive/src/lib.rs
  function hello_macro_derive (line 5) | pub fn hello_macro_derive(input: TokenStream) -> TokenStream {

FILE: listings/ch20-advanced-features/listing-20-40/hello_macro/src/lib.rs
  type HelloMacro (line 1) | pub trait HelloMacro {
    method hello_macro (line 2) | fn hello_macro();

FILE: listings/ch20-advanced-features/listing-20-40/hello_macro/src/main.rs
  type Pancakes (line 3) | struct Pancakes;
  method hello_macro (line 6) | fn hello_macro() {
  function main (line 11) | fn main() {

FILE: listings/ch20-advanced-features/listing-20-42/hello_macro/hello_macro_derive/src/lib.rs
  function hello_macro_derive (line 5) | pub fn hello_macro_derive(input: TokenStream) -> TokenStream {
  function impl_hello_macro (line 15) | fn impl_hello_macro(ast: &syn::DeriveInput) -> TokenStream {

FILE: listings/ch20-advanced-features/listing-20-42/hello_macro/src/lib.rs
  type HelloMacro (line 1) | pub trait HelloMacro {
    method hello_macro (line 2) | fn hello_macro();

FILE: listings/ch20-advanced-features/listing-20-42/hello_macro/src/main.rs
  type Pancakes (line 3) | struct Pancakes;
  method hello_macro (line 6) | fn hello_macro() {
  function main (line 11) | fn main() {

FILE: listings/ch20-advanced-features/no-listing-01-unsafe-fn/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/no-listing-02-impl-outlineprint-for-point/src/main.rs
  type OutlinePrint (line 3) | trait OutlinePrint: fmt::Display {
    method outline_print (line 4) | fn outline_print(&self) {
  type Point (line 16) | struct Point {
  function main (line 24) | fn main() {

FILE: listings/ch20-advanced-features/no-listing-03-impl-display-for-point/src/main.rs
  type OutlinePrint (line 1) | trait OutlinePrint: fmt::Display {
    method outline_print (line 2) | fn outline_print(&self) {
  type Point (line 13) | struct Point {
    method fmt (line 24) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  function main (line 30) | fn main() {

FILE: listings/ch20-advanced-features/no-listing-04-kilometers-alias/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/no-listing-05-write-trait/src/lib.rs
  type Write (line 4) | pub trait Write {
    method write (line 5) | fn write(&mut self, buf: &[u8]) -> Result<usize, Error>;
    method flush (line 6) | fn flush(&mut self) -> Result<(), Error>;
    method write_all (line 8) | fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>;
    method write_fmt (line 9) | fn write_fmt(&mut self, fmt: fmt::Arguments) -> Result<(), Error>;

FILE: listings/ch20-advanced-features/no-listing-06-result-alias/src/lib.rs
  type Result (line 4) | type Result<T> = std::result::Result<T, std::io::Error>;
  type Write (line 8) | pub trait Write {
    method write (line 9) | fn write(&mut self, buf: &[u8]) -> Result<usize>;
    method flush (line 10) | fn flush(&mut self) -> Result<()>;
    method write_all (line 12) | fn write_all(&mut self, buf: &[u8]) -> Result<()>;
    method write_fmt (line 13) | fn write_fmt(&mut self, fmt: fmt::Arguments) -> Result<()>;

FILE: listings/ch20-advanced-features/no-listing-07-never-type/src/lib.rs
  function bar (line 2) | fn bar() -> ! {

FILE: listings/ch20-advanced-features/no-listing-08-match-arms-different-types/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/no-listing-09-unwrap-definition/src/lib.rs
  type Option (line 1) | enum Option<T> {
  function unwrap (line 10) | pub fn unwrap(self) -> T {

FILE: listings/ch20-advanced-features/no-listing-10-loop-returns-never/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/no-listing-11-cant-create-str/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch20-advanced-features/no-listing-12-generic-fn-definition/src/lib.rs
  function generic (line 1) | fn generic<T>(t: T) {

FILE: listings/ch20-advanced-features/no-listing-13-generic-implicit-sized-bound/src/lib.rs
  function generic (line 1) | fn generic<T: Sized>(t: T) {

FILE: listings/ch20-advanced-features/no-listing-14-generic-maybe-sized/src/lib.rs
  function generic (line 1) | fn generic<T: ?Sized>(t: &T) {

FILE: listings/ch20-advanced-features/no-listing-18-returns-closure/src/lib.rs
  function returns_closure (line 1) | fn returns_closure(init: i32) -> impl Fn(i32) -> i32 {

FILE: listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/src/lib.rs
  function hello_macro_derive (line 5) | pub fn hello_macro_derive(input: TokenStream) -> TokenStream {
  function impl_hello_macro (line 14) | fn impl_hello_macro(ast: &syn::DeriveInput) -> TokenStream {

FILE: listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/src/lib.rs
  type HelloMacro (line 1) | pub trait HelloMacro {
    method hello_macro (line 2) | fn hello_macro();

FILE: listings/ch20-advanced-features/no-listing-21-pancakes/hello_macro/src/main.rs
  type Pancakes (line 3) | struct Pancakes;
  method hello_macro (line 6) | fn hello_macro() {
  function main (line 11) | fn main() {

FILE: listings/ch20-advanced-features/no-listing-21-pancakes/pancakes/src/main.rs
  type Pancakes (line 5) | struct Pancakes;
  function main (line 7) | fn main() {

FILE: listings/ch20-advanced-features/no-listing-22-iterator-on-counter/src/lib.rs
  type Counter (line 1) | struct Counter {
    method new (line 6) | fn new() -> Counter {
  type Item (line 13) | type Item = u32;
  method next (line 15) | fn next(&mut self) -> Option<Self::Item> {

FILE: listings/ch20-advanced-features/output-only-01-missing-unsafe/src/main.rs
  function main (line 1) | fn main() {

FILE: listings/ch21-web-server/listing-21-01/src/main.rs
  function main (line 3) | fn main() {

FILE: listings/ch21-web-server/listing-21-02/src/main.rs
  function main (line 6) | fn main() {
  function handle_connection (line 16) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-03/src/main.rs
  function main (line 6) | fn main() {
  function handle_connection (line 17) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-05/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 21) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-06/src/main.rs
  function main (line 7) | fn main() {
  function handle_connection (line 19) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-07/src/main.rs
  function main (line 7) | fn main() {
  function handle_connection (line 17) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-09/src/main.rs
  function main (line 7) | fn main() {
  function handle_connection (line 19) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-10/src/main.rs
  function main (line 12) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-11/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-12/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 24) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-13/src/lib.rs
  type ThreadPool (line 1) | pub struct ThreadPool;
    method new (line 12) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 20) | pub fn execute<F>(&self, f: F)

FILE: listings/ch21-web-server/listing-21-13/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-14/src/lib.rs
  type ThreadPool (line 4) | pub struct ThreadPool {
    method new (line 19) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 33) | pub fn execute<F>(&self, f: F)

FILE: listings/ch21-web-server/listing-21-14/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-15/src/lib.rs
  type ThreadPool (line 4) | pub struct ThreadPool {
    method new (line 19) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 33) | pub fn execute<F>(&self, f: F)
  type Worker (line 41) | struct Worker {
    method new (line 47) | fn new(id: usize) -> Worker {

FILE: listings/ch21-web-server/listing-21-15/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-16/src/lib.rs
  type ThreadPool (line 4) | pub struct ThreadPool {
    method new (line 22) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 38) | pub fn execute<F>(&self, f: F)
  type Job (line 9) | struct Job;
  type Worker (line 47) | struct Worker {
    method new (line 53) | fn new(id: usize) -> Worker {

FILE: listings/ch21-web-server/listing-21-16/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-17/src/lib.rs
  type ThreadPool (line 3) | pub struct ThreadPool {
    method new (line 22) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 38) | pub fn execute<F>(&self, f: F)
  type Job (line 8) | struct Job;
  type Worker (line 50) | struct Worker {
    method new (line 57) | fn new(id: usize, receiver: mpsc::Receiver<Job>) -> Worker {

FILE: listings/ch21-web-server/listing-21-17/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-18/src/lib.rs
  type ThreadPool (line 9) | pub struct ThreadPool {
    method new (line 28) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 47) | pub fn execute<F>(&self, f: F)
  type Job (line 14) | struct Job;
  type Worker (line 58) | struct Worker {
    method new (line 65) | fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {

FILE: listings/ch21-web-server/listing-21-18/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-19/src/lib.rs
  type ThreadPool (line 6) | pub struct ThreadPool {
    method new (line 26) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 43) | pub fn execute<F>(&self, f: F)
  type Job (line 14) | type Job = Box<dyn FnOnce() + Send + 'static>;
  type Worker (line 56) | struct Worker {
    method new (line 62) | fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {

FILE: listings/ch21-web-server/listing-21-19/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-20/src/lib.rs
  type ThreadPool (line 6) | pub struct ThreadPool {
    method new (line 21) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 37) | pub fn execute<F>(&self, f: F)
  type Job (line 11) | type Job = Box<dyn FnOnce() + Send + 'static>;
  type Worker (line 47) | struct Worker {
    method new (line 56) | fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {

FILE: listings/ch21-web-server/listing-21-20/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-21/src/lib.rs
  type ThreadPool (line 6) | pub struct ThreadPool {
    method new (line 21) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 37) | pub fn execute<F>(&self, f: F)
  type Job (line 11) | type Job = Box<dyn FnOnce() + Send + 'static>;
  type Worker (line 47) | struct Worker {
    method new (line 55) | fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {

FILE: listings/ch21-web-server/listing-21-21/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-22/src/lib.rs
  type ThreadPool (line 6) | pub struct ThreadPool {
    method new (line 21) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 37) | pub fn execute<F>(&self, f: F)
  type Job (line 11) | type Job = Box<dyn FnOnce() + Send + 'static>;
  method drop (line 49) | fn drop(&mut self) {
  type Worker (line 59) | struct Worker {
    method new (line 65) | fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {

FILE: listings/ch21-web-server/listing-21-22/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-23/src/lib.rs
  type ThreadPool (line 7) | pub struct ThreadPool {
    method new (line 27) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 50) | pub fn execute<F>(&self, f: F)
  type Job (line 14) | type Job = Box<dyn FnOnce() + Send + 'static>;
  method drop (line 61) | fn drop(&mut self) {
  type Worker (line 73) | struct Worker {
    method new (line 79) | fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {

FILE: listings/ch21-web-server/listing-21-23/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 25) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-24/src/lib.rs
  type ThreadPool (line 6) | pub struct ThreadPool {
    method new (line 21) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 40) | pub fn execute<F>(&self, f: F)
  type Job (line 11) | type Job = Box<dyn FnOnce() + Send + 'static>;
  method drop (line 51) | fn drop(&mut self) {
  type Worker (line 62) | struct Worker {
    method new (line 69) | fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {

FILE: listings/ch21-web-server/listing-21-24/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 25) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/listing-21-25/src/lib.rs
  type ThreadPool (line 6) | pub struct ThreadPool {
    method new (line 21) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 40) | pub fn execute<F>(&self, f: F)
  type Job (line 11) | type Job = Box<dyn FnOnce() + Send + 'static>;
  method drop (line 51) | fn drop(&mut self) {
  type Worker (line 62) | struct Worker {
    method new (line 68) | fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {

FILE: listings/ch21-web-server/listing-21-25/src/main.rs
  function main (line 11) | fn main() {
  function handle_connection (line 27) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/no-listing-01-define-threadpool-struct/src/lib.rs
  type ThreadPool (line 1) | pub struct ThreadPool;

FILE: listings/ch21-web-server/no-listing-01-define-threadpool-struct/src/main.rs
  function main (line 12) | fn main() {
  function handle_connection (line 25) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/no-listing-02-impl-threadpool-new/src/lib.rs
  type ThreadPool (line 1) | pub struct ThreadPool;
    method new (line 4) | pub fn new(size: usize) -> ThreadPool {

FILE: listings/ch21-web-server/no-listing-02-impl-threadpool-new/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/no-listing-03-define-execute/src/lib.rs
  type ThreadPool (line 1) | pub struct ThreadPool;
    method new (line 7) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 12) | pub fn execute<F>(&self, f: F)

FILE: listings/ch21-web-server/no-listing-03-define-execute/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/no-listing-04-update-drop-definition/src/lib.rs
  type ThreadPool (line 6) | pub struct ThreadPool {
    method new (line 21) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 37) | pub fn execute<F>(&self, f: F)
  type Job (line 11) | type Job = Box<dyn FnOnce() + Send + 'static>;
  method drop (line 49) | fn drop(&mut self) {
  type Worker (line 59) | struct Worker {
    method new (line 65) | fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {

FILE: listings/ch21-web-server/no-listing-04-update-drop-definition/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/no-listing-05-fix-worker-new/src/lib.rs
  type ThreadPool (line 6) | pub struct ThreadPool {
    method new (line 21) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 37) | pub fn execute<F>(&self, f: F)
  type Job (line 11) | type Job = Box<dyn FnOnce() + Send + 'static>;
  method drop (line 48) | fn drop(&mut self) {
  type Worker (line 57) | struct Worker {
    method new (line 64) | fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {

FILE: listings/ch21-web-server/no-listing-05-fix-worker-new/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 23) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/no-listing-06-fix-threadpool-drop/src/lib.rs
  type ThreadPool (line 6) | pub struct ThreadPool {
    method new (line 21) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 37) | pub fn execute<F>(&self, f: F)
  type Job (line 11) | type Job = Box<dyn FnOnce() + Send + 'static>;
  method drop (line 49) | fn drop(&mut self) {
  type Worker (line 61) | struct Worker {
    method new (line 67) | fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {

FILE: listings/ch21-web-server/no-listing-06-fix-threadpool-drop/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 25) | fn handle_connection(mut stream: TcpStream) {

FILE: listings/ch21-web-server/no-listing-07-final-code/src/lib.rs
  type ThreadPool (line 6) | pub struct ThreadPool {
    method new (line 21) | pub fn new(size: usize) -> ThreadPool {
    method execute (line 40) | pub fn execute<F>(&self, f: F)
  type Job (line 11) | type Job = Box<dyn FnOnce() + Send + 'static>;
  method drop (line 51) | fn drop(&mut self) {
  type Worker (line 64) | struct Worker {
    method new (line 70) | fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {

FILE: listings/ch21-web-server/no-listing-07-final-code/src/main.rs
  function main (line 10) | fn main() {
  function handle_connection (line 25) | fn handle_connection(mut stream: TcpStream) {

FILE: packages/mdbook-trpl/src/bin/figure.rs
  function main (line 8) | fn main() -> Result<(), String> {
  type Cli (line 31) | struct Cli {
  type Command (line 37) | enum Command {

FILE: packages/mdbook-trpl/src/bin/heading.rs
  function main (line 8) | fn main() -> Result<(), String> {
  type Cli (line 27) | struct Cli {
  type Command (line 33) | enum Command {

FILE: packages/mdbook-trpl/src/bin/listing.rs
  function main (line 8) | fn main() -> Result<(), String> {
  type Cli (line 27) | struct Cli {
  type Command (line 33) | enum Command {

FILE: packages/mdbook-trpl/src/bin/note.rs
  function main (line 8) | fn main() -> Result<(), String> {
  type Cli (line 27) | struct Cli {
  type Command (line 33) | enum Command {

FILE: packages/mdbook-trpl/src/config/mod.rs
  type Mode (line 7) | pub enum Mode {
    method from_context (line 14) | pub fn from_context(
  type Error (line 34) | pub enum Error {

FILE: packages/mdbook-trpl/src/config/tests.rs
  type TestPreprocessor (line 18) | struct TestPreprocessor;
  method name (line 21) | fn name(&self) -> &str {
  method run (line 25) | fn run(&self, ctx: &PreprocessorContext, mut book: Book) -> Result<Book> {
  function no_config (line 33) | fn no_config() {
  function empty_config (line 75) | fn empty_config() {
  function specify_default (line 119) | fn specify_default() {
  function specify_simple (line 165) | fn specify_simple() {
  function specify_invalid (line 211) | fn specify_invalid() {

FILE: packages/mdbook-trpl/src/figure/mod.rs
  type TrplFigure (line 39) | pub struct TrplFigure;
    method supports_renderer (line 42) | pub fn supports_renderer(&self, renderer: &str) -> bool {
  method name (line 48) | fn name(&self) -> &str {
  method run (line 52) | fn run(
  constant OPEN_FIGURE (line 80) | const OPEN_FIGURE: &'static str = "<figure>";
  constant CLOSE_FIGURE (line 81) | const CLOSE_FIGURE: &'static str = "</figure>";
  constant OPEN_CAPTION (line 83) | const OPEN_CAPTION: &'static str = "<figcaption>";
  constant CLOSE_CAPTION (line 84) | const CLOSE_CAPTION: &'static str = "</figcaption>";
  function rewrite_figure (line 86) | fn rewrite_figure(text: &str) -> Result<String> {
  function text_of (line 202) | fn text_of(node: Node) -> Option<String> {
  function bad_open (line 212) | fn bad_open(tag: &str) -> String {
  function bad_close (line 216) | fn bad_close(close: &str, required_open: &str) -> String {
  type State (line 221) | struct State<'e> {
  type Figure (line 227) | struct Figure<'e> {
  function new (line 233) | fn new() -> Figure<'e> {

FILE: packages/mdbook-trpl/src/figure/tests.rs
  function text_without_figures_is_ignored (line 4) | fn text_without_figures_is_ignored() {
  function text_with_figure_replaces_it_with_simple_text (line 10) | fn text_with_figure_replaces_it_with_simple_text() {
  function unclosed_figure (line 34) | fn unclosed_figure() {
  function empty_caption (line 41) | fn empty_caption() {
  function unclosed_caption (line 52) | fn unclosed_caption() {

FILE: packages/mdbook-trpl/src/heading/mod.rs
  type TrplHeading (line 12) | pub struct TrplHeading;
  method name (line 15) | fn name(&self) -> &str {
  method run (line 19) | fn run(&self, ctx: &PreprocessorContext, mut book: Book) -> Result<Book> {
  method supports_renderer (line 39) | fn supports_renderer(&self, renderer: &str) -> Result<bool> {
  function rewrite_headings (line 44) | fn rewrite_headings(src: &str, mode: Mode) -> anyhow::Result<String> {

FILE: packages/mdbook-trpl/src/heading/tests.rs
  function default_mode_is_unchanged (line 4) | fn default_mode_is_unchanged() {
  function strips_em (line 35) | fn strips_em() {
  function strips_nested_em (line 62) | fn strips_nested_em() {
  function strips_strong (line 73) | fn strips_strong() {
  function strips_nested_strong (line 100) | fn strips_nested_strong() {
  function strips_code (line 111) | fn strips_code() {
  function strips_html (line 138) | fn strips_html() {
  function strips_strikethrough (line 165) | fn strips_strikethrough() {
  function strips_nested_combinations (line 192) | fn strips_nested_combinations() {

FILE: packages/mdbook-trpl/src/lib.rs
  function parser (line 27) | pub fn parser(text: &str) -> Parser<'_> {
  type CompositeError (line 40) | struct CompositeError(Vec<anyhow::Error>);
    method fmt (line 43) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {

FILE: packages/mdbook-trpl/src/listing/mod.rs
  type TrplListing (line 55) | pub struct TrplListing;
  method name (line 58) | fn name(&self) -> &str {
  method run (line 62) | fn run(&self, ctx: &PreprocessorContext, mut book: Book) -> Result<Book> {
  method supports_renderer (line 82) | fn supports_renderer(&self, renderer: &str) -> Result<bool> {
  function rewrite_listing (line 87) | fn rewrite_listing(src: &str, mode: Mode) -> Result<String, String> {
  type RewriteState (line 171) | struct RewriteState<'e> {
  function open_listing (line 177) | fn open_listing(
  function close_listing (line 190) | fn close_listing(&mut self, tag: pulldown_cmark::CowStr<'_>) {
  type Listing (line 215) | struct Listing {
    method opening_html (line 222) | fn opening_html(&self) -> String {
    method closing_html (line 239) | fn closing_html(&self, trailing: &str) -> String {
    method opening_text (line 262) | fn opening_text(&self) -> String {
    method closing_text (line 269) | fn closing_text(&self, trailing: &str) -> String {
  type ListingBuilder (line 284) | struct ListingBuilder {
    method from_tag (line 291) | fn from_tag(tag: &str) -> Result<ListingBuilder, String> {
    method with_number (line 333) | fn with_number(mut self, value: String) -> Self {
    method with_caption (line 338) | fn with_caption(mut self, value: String) -> Self {
    method with_file_name (line 343) | fn with_file_name(mut self, value: String) -> Self {
    method build (line 348) | fn build(self, mode: Mode) -> Listing {

FILE: packages/mdbook-trpl/src/listing/tests.rs
  function default_mode_works (line 7) | fn default_mode_works() {
  function simple_mode_works (line 34) | fn simple_mode_works() {
  function listing_with_embedded_angle_brackets (line 67) | fn listing_with_embedded_angle_brackets() {
  function actual_listing (line 97) | fn actual_listing() {
  function no_filename (line 137) | fn no_filename() {
  function without_number (line 172) | fn without_number() {
  function with_unsupported_attr_name (line 199) | fn with_unsupported_attr_name() {
  function with_unsupported_attr_name_with_arg (line 218) | fn with_unsupported_attr_name_with_arg() {
  function for_number (line 241) | fn for_number() {
  function for_caption (line 260) | fn for_caption() {
  function for_file_name (line 279) | fn for_file_name() {

FILE: packages/mdbook-trpl/src/note/mod.rs
  type TrplNote (line 29) | pub struct TrplNote;
  method name (line 32) | fn name(&self) -> &str {
  method run (line 36) | fn run(&self, _ctx: &PreprocessorContext, mut book: Book) -> Result<Book> {
  method supports_renderer (line 45) | fn supports_renderer(&self, renderer: &str) -> Result<bool> {
  function rewrite (line 50) | pub fn rewrite(text: &str) -> String {
  type State (line 137) | enum State<'e> {

FILE: packages/mdbook-trpl/src/note/tests.rs
  function no_note (line 4) | fn no_note() {
  function with_note (line 14) | fn with_note() {
  function regular_blockquote (line 24) | fn regular_blockquote() {
  function combined (line 34) | fn combined() {
  function blockquote_then_note (line 44) | fn blockquote_then_note() {
  function note_then_blockquote (line 54) | fn note_then_blockquote() {
  function with_h1_note (line 64) | fn with_h1_note() {
  function with_h2_note (line 74) | fn with_h2_note() {
  function with_h3_note (line 84) | fn with_h3_note() {
  function with_h4_note (line 94) | fn with_h4_note() {
  function with_h5_note (line 104) | fn with_h5_note() {
  function with_h6_note (line 114) | fn with_h6_note() {
  function h1_then_blockquote (line 124) | fn h1_then_blockquote() {
  function blockquote_then_h1_note (line 135) | fn blockquote_then_h1_note() {
  function blockquote_with_strong (line 146) | fn blockquote_with_strong() {
  function normal_table (line 156) | fn normal_table() {
  function table_in_note (line 168) | fn table_in_note() {
  function table_in_quote (line 180) | fn table_in_quote() {
  function render_markdown (line 190) | fn render_markdown(text: &str) -> String {

FILE: packages/mdbook-trpl/tests/integration/main.rs
  function supports_html_renderer (line 4) | fn supports_html_renderer() {
  function errors_for_other_renderers (line 13) | fn errors_for_other_renderers() {

FILE: packages/tools/src/bin/cleanup_blockquotes.rs
  function main (line 14) | fn main() {
  function cleanup_blockquotes (line 27) | fn cleanup_blockquotes(input: String) -> String {
  function extra_space (line 43) | fn extra_space() {
  function empty_leading (line 50) | fn empty_leading() {
  function leading_after_extra_space_cleaned_up (line 57) | fn leading_after_extra_space_cleaned_up() {
  function regression_ch17_example (line 80) | fn regression_ch17_example() {

FILE: packages/tools/src/bin/concat_chapters.rs
  function main (line 26) | fn main() {
  function match_files (line 45) | fn match_files(
  function group_by_target (line 71) | fn group_by_target(
  function concat_files (line 86) | fn concat_files(
  function ensure_dir_exists (line 119) | fn ensure_dir_exists(dir_string: &str) -> io::Result<&Path> {

FILE: packages/tools/src/bin/convert_quotes.rs
  function main (line 4) | fn main() {

FILE: packages/tools/src/bin/lfp.rs
  function main (line 10) | fn main() {
  constant USAGE (line 61) | const USAGE: &str = "
  type Args (line 71) | struct Args {
  function lint_file (line 75) | fn lint_file(path: &path::Path) -> Vec<LintingError> {
  function lint_lines (line 82) | fn lint_lines<I>(lines: I) -> Vec<LintingError>
  function is_file_of_interest (line 101) | fn is_file_of_interest(path: &path::Path) -> bool {
  function is_line_of_interest (line 105) | fn is_line_of_interest(line: &str) -> bool {
  type LintingError (line 115) | enum LintingError {
  function lint_file_returns_a_vec_with_errs_when_lines_of_interest_are_found (line 126) | fn lint_file_returns_a_vec_with_errs_when_lines_of_interest_are_found() {
  function lint_file_returns_an_empty_vec_when_no_lines_of_interest_are_found (line 177) | fn lint_file_returns_an_empty_vec_when_no_lines_of_interest_are_found() {
  function is_file_of_interest_returns_false_when_the_path_is_a_directory (line 209) | fn is_file_of_interest_returns_false_when_the_path_is_a_directory() {
  function is_file_of_interest_returns_false_when_the_filename_does_not_have_the_md_extension (line 218) | fn is_file_of_interest_returns_false_when_the_filename_does_not_have_the...
  function is_file_of_interest_returns_true_when_the_filename_has_the_md_extension (line 228) | fn is_file_of_interest_returns_true_when_the_filename_has_the_md_extensi...
  function is_line_of_interest_does_not_report_a_line_if_the_line_contains_a_file_url_which_is_directly_followed_by_the_project_path (line 236) | fn is_line_of_interest_does_not_report_a_line_if_the_line_contains_a_fil...
  function is_line_of_interest_reports_a_line_if_the_line_contains_a_file_url_which_is_not_directly_followed_by_the_project_path (line 245) | fn is_line_of_interest_reports_a_line_if_the_line_contains_a_file_url_wh...

FILE: packages/tools/src/bin/link2print.rs
  function main (line 10) | fn main() {
  function read_md (line 14) | fn read_md() -> String {
  function write_md (line 22) | fn write_md(output: String) {
  function parse_references (line 26) | fn parse_references(buffer: String) -> (String, HashMap<String, String>) {
  function parse_links (line 45) | fn parse_links((buffer, ref_map): (String, HashMap<String, String>)) -> ...
  function parse (line 83) | fn parse(source: String) -> String {
  function parses_inline_link (line 88) | fn parses_inline_link() {
  function parses_multiline_links (line 99) | fn parses_multiline_links() {
  function parses_reference (line 110) | fn parses_reference() {
  function parses_implicit_link (line 122) | fn parses_implicit_link() {
  function parses_refs_with_one_space_indentation (line 130) | fn parses_refs_with_one_space_indentation() {
  function parses_refs_with_two_space_indentation (line 139) | fn parses_refs_with_two_space_indentation() {
  function parses_refs_with_three_space_indentation (line 148) | fn parses_refs_with_three_space_indentation() {
  function rejects_refs_with_four_space_indentation (line 158) | fn rejects_refs_with_four_space_indentation() {
  function ignores_optional_inline_title (line 167) | fn ignores_optional_inline_title() {
  function parses_title_with_puctuation (line 177) | fn parses_title_with_puctuation() {
  function parses_name_with_punctuation (line 185) | fn parses_name_with_punctuation() {
  function parses_name_with_utf8 (line 191) | fn parses_name_with_utf8() {
  function parses_reference_with_punctuation (line 198) | fn parses_reference_with_punctuation() {
  function parses_reference_case_insensitively (line 207) | fn parses_reference_case_insensitively() {
  function parses_link_as_reference_when_reference_is_empty (line 215) | fn parses_link_as_reference_when_reference_is_empty() {
  function does_not_parse_link_without_reference_as_reference (line 224) | fn does_not_parse_link_without_reference_as_reference() {
  function parses_link_without_reference_as_reference_with_asterisks (line 234) | fn parses_link_without_reference_as_reference_with_asterisks() {
  function ignores_links_in_pre_sections (line 242) | fn ignores_links_in_pre_sections() {
  function ignores_links_in_quoted_sections (line 257) | fn ignores_links_in_quoted_sections() {
  function ignores_links_in_quoted_sections_containing_newlines (line 263) | fn ignores_links_in_quoted_sections_containing_newlines() {
  function ignores_links_in_pre_sections_while_still_handling_links (line 274) | fn ignores_links_in_pre_sections_while_still_handling_links() {
  function ignores_quotes_in_pre_sections (line 301) | fn ignores_quotes_in_pre_sections() {
  function ignores_short_quotes (line 320) | fn ignores_short_quotes() {
  function ignores_pre_sections_with_final_quote (line 326) | fn ignores_pre_sections_with_final_quote() {
  function parses_adam_p_cheatsheet (line 360) | fn parses_adam_p_cheatsheet() {

FILE: packages/tools/src/bin/release_listings.rs
  function main (line 11) | fn main() -> Result<(), Box<dyn Error>> {
  function copy_cleaned_listing_files (line 111) | fn copy_cleaned_listing_files(
  function copy_cleaned_rust_file (line 186) | fn copy_cleaned_rust_file(

FILE: packages/tools/src/bin/remove_hidden_lines.rs
  function main (line 4) | fn main() {
  function read_md (line 8) | fn read_md() -> String {
  function write_md (line 16) | fn write_md(output: String) {
  function remove_hidden_lines (line 20) | fn remove_hidden_lines(input: &str) -> String {
  function hidden_line_in_code_block_is_removed (line 42) | fn hidden_line_in_code_block_is_removed() {
  function headings_arent_removed (line 71) | fn headings_arent_removed() {

FILE: packages/tools/src/bin/remove_links.rs
  function main (line 6) | fn main() {

FILE: packages/tools/src/bin/remove_markup.rs
  function main (line 6) | fn main() {
  function read_md (line 10) | fn read_md() -> String {
  function write_md (line 18) | fn write_md(output: String) {
  function remove_markup (line 22) | fn remove_markup(input: String) -> String {

FILE: packages/trpl/src/lib.rs
  function block_on (line 65) | pub fn block_on<F: Future>(future: F) -> F::Output {
  function run (line 73) | pub fn run<F: Future>(future: F) -> F::Output {
  function select (line 94) | pub async fn select<A, B, F1, F2>(f1: F1, f2: F2) -> Either<A, B>
  function race (line 110) | pub async fn race<A, B, F1, F2>(f1: F1, f2: F2) -> Either<A, B>
  function get (line 120) | pub async fn get(url: &str) -> Response {
  type Response (line 126) | pub struct Response(reqwest::Response);
    method text (line 133) | pub async fn text(self) -> String {
  type Html (line 140) | pub struct Html {
    method parse (line 149) | pub fn parse(source: &str) -> Html {
    method select_first (line 160) | pub fn select_first<'a>(

FILE: packages/trpl/tests/integration/main.rs
  function using_run_works (line 22) | fn using_run_works() {
  function re_exported_block_on_works (line 33) | fn re_exported_block_on_works() {
  function re_exported_spawn_works (line 39) | fn re_exported_spawn_works() {
  function re_exported_sleep_works (line 50) | fn re_exported_sleep_works() {
  function re_exported_channel_apis_work (line 59) | fn re_exported_channel_apis_work() {
  function join_fn (line 79) | fn join_fn() {
  function join3_fn (line 90) | fn join3_fn() {
  function join_all_fn (line 103) | fn join_all_fn() {
  function join_macro (line 129) | fn join_macro() {
  function select (line 145) | fn select() {
  function race_continues_to_work (line 170) | fn race_continues_to_work() {
  function yield_now (line 195) | fn yield_now() {
  function read_to_string (line 205) | fn read_to_string() {
  function stream_iter (line 216) | fn stream_iter() {
  function receiver_stream (line 236) | fn receiver_stream() {
  function re_exported_interval_stream_works (line 255) | fn re_exported_interval_stream_works() {
  function re_exported_html (line 269) | fn re_exported_html() {
Condensed preview — 2045 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,707K chars).
[
  {
    "path": ".cargo/config.toml",
    "chars": 57,
    "preview": "[cargo-new]\nname = \"Your Name\"\nemail = \"you@example.com\"\n"
  },
  {
    "path": ".git-blame-ignore-revs",
    "chars": 70,
    "preview": "# Ran dprint fmt on the repo\n3a30e4c1fbe641afc066b3af9eb01dcdf5ed8b24\n"
  },
  {
    "path": ".gitattributes",
    "chars": 133,
    "preview": "# Set the default behavior, in case people don't have core.autocrlf set.\n* text=auto eol=lf\n*.docx binary\n*.odt binary\n*"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 379,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\n---\n\n- I have searched open and closed issues and pull re"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/new_translation.md",
    "chars": 170,
    "preview": "---\nname: New translation\nabout: Let us know of a new language translation you're working on\n---\n\nLanguage your translat"
  },
  {
    "path": ".github/workflows/main.yml",
    "chars": 3375,
    "preview": "name: CI\non: [push, pull_request]\n\nenv:\n  MDBOOK_VERSION: 0.5.1\n\njobs:\n  test:\n    name: Run tests\n    runs-on: ubuntu-l"
  },
  {
    "path": ".gitignore",
    "chars": 56,
    "preview": "book/\n*~\n.idea\n.DS_Store\ntarget\ntmp\n\n.nova\n.vscode\n.zed\n"
  },
  {
    "path": "2018-edition/book.toml",
    "chars": 210,
    "preview": "[book]\ntitle = \"The Rust Programming Language\"\nauthors = [\"Steve Klabnik\", \"Carol Nichols\", \"Contributions from the Rust"
  },
  {
    "path": "2018-edition/dot/trpl04-01.dot",
    "chars": 817,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "2018-edition/dot/trpl04-02.dot",
    "chars": 1177,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "2018-edition/dot/trpl04-03.dot",
    "chars": 1513,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "2018-edition/dot/trpl04-04.dot",
    "chars": 1192,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "2018-edition/dot/trpl04-05.dot",
    "chars": 1109,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "2018-edition/dot/trpl04-06.dot",
    "chars": 1385,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "2018-edition/dot/trpl15-01.dot",
    "chars": 887,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "2018-edition/dot/trpl15-02.dot",
    "chars": 455,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<\n    <TABLE"
  },
  {
    "path": "2018-edition/dot/trpl15-03.dot",
    "chars": 1545,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table4[label=<<TABLE BORD"
  },
  {
    "path": "2018-edition/ferris.css",
    "chars": 600,
    "preview": "body.light .does_not_compile,\nbody.light .panics,\nbody.light .not_desired_behavior,\nbody.rust .does_not_compile,\nbody.ru"
  },
  {
    "path": "2018-edition/ferris.js",
    "chars": 1174,
    "preview": "var ferrisTypes = [\n  {\n    attr: 'does_not_compile',\n    title: 'This code does not compile!'\n  },\n  {\n    attr: 'panic"
  },
  {
    "path": "2018-edition/src/SUMMARY.md",
    "chars": 6776,
    "preview": "# The Rust Programming Language\n\n[Foreword](foreword.md)\n[Introduction](ch00-00-introduction.md)\n\n## Getting started\n\n- "
  },
  {
    "path": "2018-edition/src/appendix-00.md",
    "chars": 382,
    "preview": "# Appendix\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a lin"
  },
  {
    "path": "2018-edition/src/appendix-01-keywords.md",
    "chars": 413,
    "preview": "## Appendix A: Keywords\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came h"
  },
  {
    "path": "2018-edition/src/appendix-02-operators.md",
    "chars": 428,
    "preview": "## Appendix B: Operators and Symbols\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\n"
  },
  {
    "path": "2018-edition/src/appendix-03-derivable-traits.md",
    "chars": 437,
    "preview": "## Appendix C: Derivable Traits\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf yo"
  },
  {
    "path": "2018-edition/src/appendix-04-useful-development-tools.md",
    "chars": 461,
    "preview": "# Appendix D - Useful Development Tools\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation"
  },
  {
    "path": "2018-edition/src/appendix-05-editions.md",
    "chars": 413,
    "preview": "# Appendix E - Editions\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came h"
  },
  {
    "path": "2018-edition/src/appendix-06-translation.md",
    "chars": 435,
    "preview": "## Appendix F: Translations of the Book\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation"
  },
  {
    "path": "2018-edition/src/appendix-07-nightly-rust.md",
    "chars": 448,
    "preview": "# Appendix G - How Rust is Made and “Nightly Rust”\n\nThe 2018 edition of the book is no longer distributed with Rust's do"
  },
  {
    "path": "2018-edition/src/ch00-00-introduction.md",
    "chars": 404,
    "preview": "# Introduction\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a"
  },
  {
    "path": "2018-edition/src/ch01-00-getting-started.md",
    "chars": 413,
    "preview": "# Getting Started\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here vi"
  },
  {
    "path": "2018-edition/src/ch01-01-installation.md",
    "chars": 405,
    "preview": "## Installation\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via "
  },
  {
    "path": "2018-edition/src/ch01-02-hello-world.md",
    "chars": 404,
    "preview": "## Hello, World!\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via"
  },
  {
    "path": "2018-edition/src/ch01-03-hello-cargo.md",
    "chars": 404,
    "preview": "## Hello, Cargo!\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via"
  },
  {
    "path": "2018-edition/src/ch02-00-guessing-game-tutorial.md",
    "chars": 439,
    "preview": "# Programming a Guessing Game\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you "
  },
  {
    "path": "2018-edition/src/ch03-00-common-programming-concepts.md",
    "chars": 449,
    "preview": "# Common Programming Concepts\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you "
  },
  {
    "path": "2018-edition/src/ch03-01-variables-and-mutability.md",
    "chars": 441,
    "preview": "## Variables and Mutability\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you ca"
  },
  {
    "path": "2018-edition/src/ch03-02-data-types.md",
    "chars": 399,
    "preview": "## Data Types\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a "
  },
  {
    "path": "2018-edition/src/ch03-03-how-functions-work.md",
    "chars": 414,
    "preview": "## Functions\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a l"
  },
  {
    "path": "2018-edition/src/ch03-04-comments.md",
    "chars": 393,
    "preview": "## Comments\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a li"
  },
  {
    "path": "2018-edition/src/ch03-05-control-flow.md",
    "chars": 405,
    "preview": "## Control Flow\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via "
  },
  {
    "path": "2018-edition/src/ch04-00-understanding-ownership.md",
    "chars": 437,
    "preview": "# Understanding Ownership\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came"
  },
  {
    "path": "2018-edition/src/ch04-01-what-is-ownership.md",
    "chars": 421,
    "preview": "## What Is Ownership?\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came her"
  },
  {
    "path": "2018-edition/src/ch04-02-references-and-borrowing.md",
    "chars": 441,
    "preview": "## References and Borrowing\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you ca"
  },
  {
    "path": "2018-edition/src/ch04-03-slices.md",
    "chars": 395,
    "preview": "## The Slice Type\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here vi"
  },
  {
    "path": "2018-edition/src/ch05-00-structs.md",
    "chars": 421,
    "preview": "# Using Structs to Structure Related Data\n\nThe 2018 edition of the book is no longer distributed with Rust's documentati"
  },
  {
    "path": "2018-edition/src/ch05-01-defining-structs.md",
    "chars": 435,
    "preview": "## Defining and Instantiating Structs\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n"
  },
  {
    "path": "2018-edition/src/ch05-02-example-structs.md",
    "chars": 431,
    "preview": "## An Example Program Using Structs\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nI"
  },
  {
    "path": "2018-edition/src/ch05-03-method-syntax.md",
    "chars": 408,
    "preview": "## Method Syntax\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via"
  },
  {
    "path": "2018-edition/src/ch06-00-enums.md",
    "chars": 404,
    "preview": "# Enums and Pattern Matching\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you c"
  },
  {
    "path": "2018-edition/src/ch06-01-defining-an-enum.md",
    "chars": 417,
    "preview": "## Defining an Enum\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here "
  },
  {
    "path": "2018-edition/src/ch06-02-match.md",
    "chars": 412,
    "preview": "## The `match` Control Flow Operator\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\n"
  },
  {
    "path": "2018-edition/src/ch06-03-if-let.md",
    "chars": 415,
    "preview": "## Concise Control Flow with `if let`\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n"
  },
  {
    "path": "2018-edition/src/ch07-00-packages-crates-and-modules.md",
    "chars": 421,
    "preview": "# Packages, Crates, and Modules\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf yo"
  },
  {
    "path": "2018-edition/src/ch07-01-packages-and-crates-for-making-libraries-and-executables.md",
    "chars": 478,
    "preview": "## Packages and Crates for Making Libraries and Executables\n\nThe 2018 edition of the book is no longer distributed with "
  },
  {
    "path": "2018-edition/src/ch07-02-modules-and-use-to-control-scope-and-privacy.md",
    "chars": 456,
    "preview": "## The Module System to Control Scope and Privacy\n\nThe 2018 edition of the book is no longer distributed with Rust's doc"
  },
  {
    "path": "2018-edition/src/ch08-00-common-collections.md",
    "chars": 422,
    "preview": "# Common Collections\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here"
  },
  {
    "path": "2018-edition/src/ch08-01-vectors.md",
    "chars": 419,
    "preview": "## Storing Lists of Values with Vectors\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation"
  },
  {
    "path": "2018-edition/src/ch08-02-strings.md",
    "chars": 422,
    "preview": "## Storing UTF-8 Encoded Text with Strings\n\nThe 2018 edition of the book is no longer distributed with Rust's documentat"
  },
  {
    "path": "2018-edition/src/ch08-03-hash-maps.md",
    "chars": 435,
    "preview": "## Storing Keys with Associated Values in Hash Maps\n\nThe 2018 edition of the book is no longer distributed with Rust's d"
  },
  {
    "path": "2018-edition/src/ch09-00-error-handling.md",
    "chars": 410,
    "preview": "# Error Handling\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via"
  },
  {
    "path": "2018-edition/src/ch09-01-unrecoverable-errors-with-panic.md",
    "chars": 465,
    "preview": "## Unrecoverable Errors with `panic!`\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n"
  },
  {
    "path": "2018-edition/src/ch09-02-recoverable-errors-with-result.md",
    "chars": 461,
    "preview": "## Recoverable Errors with `Result`\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nI"
  },
  {
    "path": "2018-edition/src/ch09-03-to-panic-or-not-to-panic.md",
    "chars": 447,
    "preview": "## To `panic!` or Not to `panic!`\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf "
  },
  {
    "path": "2018-edition/src/ch10-00-generics.md",
    "chars": 420,
    "preview": "# Generic Types, Traits, and Lifetimes\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation."
  },
  {
    "path": "2018-edition/src/ch10-01-syntax.md",
    "chars": 399,
    "preview": "## Generic Data Types\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came her"
  },
  {
    "path": "2018-edition/src/ch10-02-traits.md",
    "chars": 413,
    "preview": "## Traits: Defining Shared Behavior\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nI"
  },
  {
    "path": "2018-edition/src/ch10-03-lifetime-syntax.md",
    "chars": 435,
    "preview": "## Validating References with Lifetimes\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation"
  },
  {
    "path": "2018-edition/src/ch11-00-testing.md",
    "chars": 405,
    "preview": "# Writing Automated Tests\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came"
  },
  {
    "path": "2018-edition/src/ch11-01-writing-tests.md",
    "chars": 413,
    "preview": "## How to Write Tests\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came her"
  },
  {
    "path": "2018-edition/src/ch11-02-running-tests.md",
    "chars": 424,
    "preview": "## Controlling How Tests Are Run\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf y"
  },
  {
    "path": "2018-edition/src/ch11-03-test-organization.md",
    "chars": 420,
    "preview": "## Test Organization\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here"
  },
  {
    "path": "2018-edition/src/ch12-00-an-io-project.md",
    "chars": 441,
    "preview": "# An I/O Project: Building a Command Line Program\n\nThe 2018 edition of the book is no longer distributed with Rust's doc"
  },
  {
    "path": "2018-edition/src/ch12-01-accepting-command-line-arguments.md",
    "chars": 465,
    "preview": "## Accepting Command Line Arguments\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nI"
  },
  {
    "path": "2018-edition/src/ch12-02-reading-a-file.md",
    "chars": 411,
    "preview": "## Reading a File\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here vi"
  },
  {
    "path": "2018-edition/src/ch12-03-improving-error-handling-and-modularity.md",
    "chars": 499,
    "preview": "## Refactoring to Improve Modularity and Error Handling\n\nThe 2018 edition of the book is no longer distributed with Rust"
  },
  {
    "path": "2018-edition/src/ch12-04-testing-the-librarys-functionality.md",
    "chars": 504,
    "preview": "## Developing the Library’s Functionality with Test-Driven Development\n\nThe 2018 edition of the book is no longer distri"
  },
  {
    "path": "2018-edition/src/ch12-05-working-with-environment-variables.md",
    "chars": 471,
    "preview": "## Working with Environment Variables\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n"
  },
  {
    "path": "2018-edition/src/ch12-06-writing-to-stderr-instead-of-stdout.md",
    "chars": 506,
    "preview": "## Writing Error Messages to Standard Error Instead of Standard Output\n\nThe 2018 edition of the book is no longer distri"
  },
  {
    "path": "2018-edition/src/ch13-00-functional-features.md",
    "chars": 458,
    "preview": "# Functional Language Features: Iterators and Closures\n\nThe 2018 edition of the book is no longer distributed with Rust'"
  },
  {
    "path": "2018-edition/src/ch13-01-closures.md",
    "chars": 449,
    "preview": "## Closures: Anonymous Functions that Can Capture Their Environment\n\nThe 2018 edition of the book is no longer distribut"
  },
  {
    "path": "2018-edition/src/ch13-02-iterators.md",
    "chars": 430,
    "preview": "## Processing a Series of Items with Iterators\n\nThe 2018 edition of the book is no longer distributed with Rust's docume"
  },
  {
    "path": "2018-edition/src/ch13-03-improving-our-io-project.md",
    "chars": 442,
    "preview": "## Improving Our I/O Project\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you c"
  },
  {
    "path": "2018-edition/src/ch13-04-performance.md",
    "chars": 433,
    "preview": "## Comparing Performance: Loops vs. Iterators\n\nThe 2018 edition of the book is no longer distributed with Rust's documen"
  },
  {
    "path": "2018-edition/src/ch14-00-more-about-cargo.md",
    "chars": 430,
    "preview": "# More About Cargo and Crates.io\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf y"
  },
  {
    "path": "2018-edition/src/ch14-01-release-profiles.md",
    "chars": 441,
    "preview": "## Customizing Builds with Release Profiles\n\nThe 2018 edition of the book is no longer distributed with Rust's documenta"
  },
  {
    "path": "2018-edition/src/ch14-02-publishing-to-crates-io.md",
    "chars": 446,
    "preview": "## Publishing a Crate to Crates.io\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf"
  },
  {
    "path": "2018-edition/src/ch14-03-cargo-workspaces.md",
    "chars": 417,
    "preview": "## Cargo Workspaces\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here "
  },
  {
    "path": "2018-edition/src/ch14-04-installing-binaries.md",
    "chars": 462,
    "preview": "## Installing Binaries from Crates.io with `cargo install`\n\nThe 2018 edition of the book is no longer distributed with R"
  },
  {
    "path": "2018-edition/src/ch14-05-extending-cargo.md",
    "chars": 435,
    "preview": "## Extending Cargo with Custom Commands\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation"
  },
  {
    "path": "2018-edition/src/ch15-00-smart-pointers.md",
    "chars": 410,
    "preview": "# Smart Pointers\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via"
  },
  {
    "path": "2018-edition/src/ch15-01-box.md",
    "chars": 418,
    "preview": "## Using `Box<T>` to Point to Data on the Heap\n\nThe 2018 edition of the book is no longer distributed with Rust's docume"
  },
  {
    "path": "2018-edition/src/ch15-02-deref.md",
    "chars": 449,
    "preview": "## Treating Smart Pointers Like Regular References with the `Deref` Trait\n\nThe 2018 edition of the book is no longer dis"
  },
  {
    "path": "2018-edition/src/ch15-03-drop.md",
    "chars": 422,
    "preview": "## Running Code on Cleanup with the `Drop` Trait\n\nThe 2018 edition of the book is no longer distributed with Rust's docu"
  },
  {
    "path": "2018-edition/src/ch15-04-rc.md",
    "chars": 417,
    "preview": "## `Rc<T>`, the Reference Counted Smart Pointer\n\nThe 2018 edition of the book is no longer distributed with Rust's docum"
  },
  {
    "path": "2018-edition/src/ch15-05-interior-mutability.md",
    "chars": 455,
    "preview": "## `RefCell<T>` and the Interior Mutability Pattern\n\nThe 2018 edition of the book is no longer distributed with Rust's d"
  },
  {
    "path": "2018-edition/src/ch15-06-reference-cycles.md",
    "chars": 433,
    "preview": "## Reference Cycles Can Leak Memory\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nI"
  },
  {
    "path": "2018-edition/src/ch16-00-concurrency.md",
    "chars": 410,
    "preview": "# Fearless Concurrency\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came he"
  },
  {
    "path": "2018-edition/src/ch16-01-threads.md",
    "chars": 423,
    "preview": "## Using Threads to Run Code Simultaneously\n\nThe 2018 edition of the book is no longer distributed with Rust's documenta"
  },
  {
    "path": "2018-edition/src/ch16-02-message-passing.md",
    "chars": 453,
    "preview": "## Using Message Passing to Transfer Data Between Threads\n\nThe 2018 edition of the book is no longer distributed with Ru"
  },
  {
    "path": "2018-edition/src/ch16-03-shared-state.md",
    "chars": 417,
    "preview": "## Shared-State Concurrency\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you ca"
  },
  {
    "path": "2018-edition/src/ch16-04-extensible-concurrency-sync-and-send.md",
    "chars": 497,
    "preview": "## Extensible Concurrency with the `Sync` and `Send` Traits\n\nThe 2018 edition of the book is no longer distributed with "
  },
  {
    "path": "2018-edition/src/ch17-00-oop.md",
    "chars": 419,
    "preview": "# Object Oriented Programming Features of Rust\n\nThe 2018 edition of the book is no longer distributed with Rust's docume"
  },
  {
    "path": "2018-edition/src/ch17-01-what-is-oo.md",
    "chars": 434,
    "preview": "## Characteristics of Object-Oriented Languages\n\nThe 2018 edition of the book is no longer distributed with Rust's docum"
  },
  {
    "path": "2018-edition/src/ch17-02-trait-objects.md",
    "chars": 456,
    "preview": "## Using Trait Objects that Allow for Values of Different Types\n\nThe 2018 edition of the book is no longer distributed w"
  },
  {
    "path": "2018-edition/src/ch17-03-oo-design-patterns.md",
    "chars": 452,
    "preview": "## Implementing an Object-Oriented Design Pattern\n\nThe 2018 edition of the book is no longer distributed with Rust's doc"
  },
  {
    "path": "2018-edition/src/ch18-00-patterns.md",
    "chars": 406,
    "preview": "# Patterns and Matching\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came h"
  },
  {
    "path": "2018-edition/src/ch18-01-all-the-places-for-patterns.md",
    "chars": 459,
    "preview": "## All the Places Patterns Can Be Used\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation."
  },
  {
    "path": "2018-edition/src/ch18-02-refutability.md",
    "chars": 445,
    "preview": "## Refutability: Whether a Pattern Might Fail to Match\n\nThe 2018 edition of the book is no longer distributed with Rust'"
  },
  {
    "path": "2018-edition/src/ch18-03-pattern-syntax.md",
    "chars": 412,
    "preview": "## Pattern Syntax\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here vi"
  },
  {
    "path": "2018-edition/src/ch19-00-advanced-features.md",
    "chars": 420,
    "preview": "# Advanced Features\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here "
  },
  {
    "path": "2018-edition/src/ch19-01-unsafe-rust.md",
    "chars": 403,
    "preview": "## Unsafe Rust\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a"
  },
  {
    "path": "2018-edition/src/ch19-02-advanced-lifetimes.md",
    "chars": 402,
    "preview": "## Advanced Lifetimes\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came her"
  },
  {
    "path": "2018-edition/src/ch19-03-advanced-traits.md",
    "chars": 415,
    "preview": "## Advanced Traits\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here v"
  },
  {
    "path": "2018-edition/src/ch19-04-advanced-types.md",
    "chars": 412,
    "preview": "## Advanced Types\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here vi"
  },
  {
    "path": "2018-edition/src/ch19-05-advanced-functions-and-closures.md",
    "chars": 463,
    "preview": "## Advanced Functions and Closures\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf"
  },
  {
    "path": "2018-edition/src/ch19-06-macros.md",
    "chars": 388,
    "preview": "## Macros\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a link"
  },
  {
    "path": "2018-edition/src/ch20-00-final-project-a-web-server.md",
    "chars": 471,
    "preview": "# Final Project: Building a Multithreaded Web Server\n\nThe 2018 edition of the book is no longer distributed with Rust's "
  },
  {
    "path": "2018-edition/src/ch20-01-single-threaded.md",
    "chars": 437,
    "preview": "## Building a Single-Threaded Web Server\n\nThe 2018 edition of the book is no longer distributed with Rust's documentatio"
  },
  {
    "path": "2018-edition/src/ch20-02-multithreaded.md",
    "chars": 458,
    "preview": "## Turning Our Single-Threaded Server into a Multithreaded Server\n\nThe 2018 edition of the book is no longer distributed"
  },
  {
    "path": "2018-edition/src/ch20-03-graceful-shutdown-and-cleanup.md",
    "chars": 457,
    "preview": "## Graceful Shutdown and Cleanup\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf y"
  },
  {
    "path": "2018-edition/src/foreword.md",
    "chars": 376,
    "preview": "# Foreword\n\nThe 2018 edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a lin"
  },
  {
    "path": "ADMIN_TASKS.md",
    "chars": 7290,
    "preview": "# Administrative Tasks\n\nThis documentation is for anyone managing the repo to remember how to do\noccasional maintenance "
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 3945,
    "preview": "# Contributing\n\nWe'd love your help! Thanks for caring about the book.\n\n## Where to Edit\n\nAll edits should be made in th"
  },
  {
    "path": "COPYRIGHT",
    "chars": 219,
    "preview": "This repository is licensed under the Apache License, Version 2.0\n<LICENSE-APACHE or https://www.apache.org/licenses/LIC"
  },
  {
    "path": "Cargo.toml",
    "chars": 478,
    "preview": "[workspace]\nmembers = [\"packages/tools\"]\ndefault-members = [\"packages/tools\"]\nresolver = \"2\"\nexclude = [\n    \"linkchecke"
  },
  {
    "path": "LICENSE-APACHE",
    "chars": 10847,
    "preview": "                              Apache License\n                        Version 2.0, January 2004\n                     http"
  },
  {
    "path": "LICENSE-MIT",
    "chars": 1071,
    "preview": "Copyright (c) 2010 The Rust Project Developers\n\nPermission is hereby granted, free of charge, to any\nperson obtaining a "
  },
  {
    "path": "README.md",
    "chars": 3769,
    "preview": "# The Rust Programming Language\n\n![Build Status](https://github.com/rust-lang/book/workflows/CI/badge.svg)\n\nThis reposit"
  },
  {
    "path": "TODO.md",
    "chars": 607,
    "preview": "# In each chapter\n\n- [ ] Manual regeneration\n- [ ] Check for upstream changes from last snapshot\n- [ ] Propagate updated"
  },
  {
    "path": "book.toml",
    "chars": 2393,
    "preview": "# Sync any changes to this *other than where explicitly specified* with the copy\n# in `nostarch/book.toml`!\n\n[book]\ntitl"
  },
  {
    "path": "ci/dictionary.txt",
    "chars": 6073,
    "preview": "personal_ws-1.1 en 0 utf-8\nabcabcabc\nabcd\nabcdefghijklmnopqrstuvwxyz\nABIs\nAddAssign\nAddr\nadfb\nafdc\naggregator\nAGraph\nali"
  },
  {
    "path": "ci/spellcheck.sh",
    "chars": 3504,
    "preview": "#!/bin/bash\n\nset -eu\n\naspell --version\n\n# Checks project Markdown files for spelling mistakes.\n\n# Notes:\n\n# This script "
  },
  {
    "path": "ci/validate.sh",
    "chars": 153,
    "preview": "#!/bin/bash\n\nset -eu\n\nfor file in src/*.md ; do\n    echo Checking references in \"$file\"\n    cargo run --quiet --bin link"
  },
  {
    "path": "dot/trpl04-01.dot",
    "chars": 817,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "dot/trpl04-02.dot",
    "chars": 1177,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "dot/trpl04-03.dot",
    "chars": 1513,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "dot/trpl04-04.dot",
    "chars": 1192,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "dot/trpl04-05.dot",
    "chars": 1263,
    "preview": "digraph {\n   rankdir = LR;\n   overlap = false;\n   dpi = 300.0;\n   node [shape = \"plaintext\";];\n   \n   s [label = <<TABLE"
  },
  {
    "path": "dot/trpl04-06.dot",
    "chars": 1109,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "dot/trpl04-07.dot",
    "chars": 1385,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "dot/trpl15-01.dot",
    "chars": 887,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<<TABLE BORD"
  },
  {
    "path": "dot/trpl15-02.dot",
    "chars": 455,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table0[label=<\n    <TABLE"
  },
  {
    "path": "dot/trpl15-03.dot",
    "chars": 1545,
    "preview": "digraph {\n    rankdir=LR;\n    overlap=false;\n    dpi=300.0;\n    node [shape=\"plaintext\"];\n\n    table4[label=<<TABLE BORD"
  },
  {
    "path": "dot/trpl15-04.dot",
    "chars": 394,
    "preview": "digraph {\n    node[shape=record];\n    rankdir=LR;\n\n    l1[label=\"{<data> 5| <next>}\"];\n    l2[label=\"{<data> 10| <next>}"
  },
  {
    "path": "dot/trpl17-01.dot",
    "chars": 722,
    "preview": "digraph {\n   dpi = 300.0;\n   \n   rankdir = \"LR\";\n   \n   // makes ordering between subgraphs work\n   newrank = true;\n   \n"
  },
  {
    "path": "dot/trpl17-02.dot",
    "chars": 494,
    "preview": "digraph {\n   dpi = 300.0;\n   \n   rankdir = \"LR\";\n   splines = false;\n   cluster = true;\n   \n   node [shape = diamond;];\n"
  },
  {
    "path": "dot/trpl17-03.dot",
    "chars": 663,
    "preview": "digraph {\n   dpi = 300.0;\n   \n   rankdir = \"LR\";\n   splines = false;\n   cluster = true;\n   \n   node [shape = diamond;];\n"
  },
  {
    "path": "dot/trpl17-04.dot",
    "chars": 461,
    "preview": "digraph {\n   rankdir = RL;\n   overlap = false;\n   dpi = 300.0;\n   splines = false;\n   cluster = true;\n   \n   node [shape"
  },
  {
    "path": "dot/trpl17-05.dot",
    "chars": 884,
    "preview": "digraph {\n   rankdir = RL;\n   overlap = false;\n   dpi = 300.0;\n   splines = false;\n   cluster = true;\n   \n   node [shape"
  },
  {
    "path": "dot/trpl17-06.dot",
    "chars": 1111,
    "preview": "digraph {\n   rankdir = LR;\n   dpi = 300.0;\n   \n   node [shape = \"plaintext\";];\n   \n   pinned_box [label = <<table border"
  },
  {
    "path": "dot/trpl17-07.dot",
    "chars": 1719,
    "preview": "digraph {\n   rankdir = LR;\n   newrank = true;\n   dpi = 300.0;\n   \n   node [shape = \"plaintext\";];\n   \n   \n   subgraph cl"
  },
  {
    "path": "dot/trpl17-08.dot",
    "chars": 902,
    "preview": "digraph {\n   rankdir = LR;\n   overlap = false;\n   dpi = 300.0;\n   splines = false;\n   cluster = true;\n   newrank = true;"
  },
  {
    "path": "dot/trpl17-09.dot",
    "chars": 1523,
    "preview": "digraph {\n   rankdir = LR;\n   overlap = false;\n   dpi = 300.0;\n   splines = false;\n   cluster = true;\n   newrank = true;"
  },
  {
    "path": "dprint.jsonc",
    "chars": 963,
    "preview": "{\n  \"typescript\": {\n  },\n  \"json\": {\n  },\n  \"markdown\": {\n  },\n  \"malva\": {\n  },\n  \"excludes\": [\n    \"**/node_modules\",\n"
  },
  {
    "path": "ferris.css",
    "chars": 1196,
    "preview": "body.light .does_not_compile,\nbody.light .panics,\nbody.light .not_desired_behavior,\nbody.rust .does_not_compile,\nbody.ru"
  },
  {
    "path": "ferris.js",
    "chars": 2653,
    "preview": "// @ts-check\n\n/**\n * @typedef {{ attr: string, title: string }} FerrisType\n */\n\n/** @type {Array<FerrisType>} */\nconst F"
  },
  {
    "path": "first-edition/book.toml",
    "chars": 89,
    "preview": "[book]\ntitle = \"The Rust Programming Language\"\nauthors = [\"The Rust Project Developers\"]\n"
  },
  {
    "path": "first-edition/src/README.md",
    "chars": 394,
    "preview": "# The Rust Programming Language\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf y"
  },
  {
    "path": "first-edition/src/SUMMARY.md",
    "chars": 2232,
    "preview": "# Summary\n\n[Introduction](README.md)\n\n* [Getting Started](getting-started.md)\n* [Tutorial: Guessing Game](guessing-game."
  },
  {
    "path": "first-edition/src/associated-types.md",
    "chars": 482,
    "preview": "# Associated Types\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here "
  },
  {
    "path": "first-edition/src/attributes.md",
    "chars": 379,
    "preview": "# Attributes\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a "
  },
  {
    "path": "first-edition/src/bibliography.md",
    "chars": 383,
    "preview": "# Bibliography\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via "
  },
  {
    "path": "first-edition/src/borrow-and-asref.md",
    "chars": 409,
    "preview": "# Borrow and AsRef\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here "
  },
  {
    "path": "first-edition/src/casting-between-types.md",
    "chars": 401,
    "preview": "# Casting Between Types\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came "
  },
  {
    "path": "first-edition/src/choosing-your-guarantees.md",
    "chars": 425,
    "preview": "# Choosing your Guarantees\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you ca"
  },
  {
    "path": "first-edition/src/closures.md",
    "chars": 387,
    "preview": "# Closures\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a li"
  },
  {
    "path": "first-edition/src/comments.md",
    "chars": 387,
    "preview": "# Comments\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a li"
  },
  {
    "path": "first-edition/src/concurrency.md",
    "chars": 396,
    "preview": "# Concurrency\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a"
  },
  {
    "path": "first-edition/src/conditional-compilation.md",
    "chars": 406,
    "preview": "# Conditional Compilation\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you cam"
  },
  {
    "path": "first-edition/src/const-and-static.md",
    "chars": 455,
    "preview": "# const and static\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here "
  },
  {
    "path": "first-edition/src/crates-and-modules.md",
    "chars": 457,
    "preview": "# Crates and Modules\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came her"
  },
  {
    "path": "first-edition/src/deref-coercions.md",
    "chars": 452,
    "preview": "# `Deref` coercions\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here"
  },
  {
    "path": "first-edition/src/documentation.md",
    "chars": 449,
    "preview": "# Documentation\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via"
  },
  {
    "path": "first-edition/src/drop.md",
    "chars": 375,
    "preview": "# Drop\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a link o"
  },
  {
    "path": "first-edition/src/effective-rust.md",
    "chars": 387,
    "preview": "# Effective Rust\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here vi"
  },
  {
    "path": "first-edition/src/enums.md",
    "chars": 389,
    "preview": "# Enums\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a link "
  },
  {
    "path": "first-edition/src/error-handling.md",
    "chars": 404,
    "preview": "# Error Handling\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here vi"
  },
  {
    "path": "first-edition/src/ffi.md",
    "chars": 447,
    "preview": "# Foreign Function Interface\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you "
  },
  {
    "path": "first-edition/src/functions.md",
    "chars": 399,
    "preview": "# Functions\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a l"
  },
  {
    "path": "first-edition/src/generics.md",
    "chars": 387,
    "preview": "# Generics\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a li"
  },
  {
    "path": "first-edition/src/getting-started.md",
    "chars": 405,
    "preview": "# Getting Started\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here v"
  },
  {
    "path": "first-edition/src/glossary.md",
    "chars": 375,
    "preview": "# Glossary\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a li"
  },
  {
    "path": "first-edition/src/guessing-game.md",
    "chars": 411,
    "preview": "# Guessing Game\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via"
  },
  {
    "path": "first-edition/src/if-let.md",
    "chars": 381,
    "preview": "# if let\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a link"
  },
  {
    "path": "first-edition/src/if.md",
    "chars": 394,
    "preview": "# if\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a link or "
  },
  {
    "path": "first-edition/src/iterators.md",
    "chars": 390,
    "preview": "# Iterators\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a l"
  },
  {
    "path": "first-edition/src/lifetimes.md",
    "chars": 396,
    "preview": "# Lifetimes\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a l"
  },
  {
    "path": "first-edition/src/loops.md",
    "chars": 407,
    "preview": "# Loops\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a link "
  },
  {
    "path": "first-edition/src/macros.md",
    "chars": 381,
    "preview": "# Macros\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a link"
  },
  {
    "path": "first-edition/src/match.md",
    "chars": 378,
    "preview": "# Match\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a link "
  },
  {
    "path": "first-edition/src/method-syntax.md",
    "chars": 402,
    "preview": "# Method Syntax\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via"
  },
  {
    "path": "first-edition/src/mutability.md",
    "chars": 407,
    "preview": "# Mutability\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a "
  },
  {
    "path": "first-edition/src/operators-and-overloading.md",
    "chars": 485,
    "preview": "# Operators and Overloading\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you c"
  },
  {
    "path": "first-edition/src/ownership.md",
    "chars": 404,
    "preview": "# Ownership\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a l"
  },
  {
    "path": "first-edition/src/patterns.md",
    "chars": 393,
    "preview": "# Patterns\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via a li"
  },
  {
    "path": "first-edition/src/primitive-types.md",
    "chars": 403,
    "preview": "# Primitive Types\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here v"
  },
  {
    "path": "first-edition/src/procedural-macros.md",
    "chars": 498,
    "preview": "# Procedural Macros (and custom Derive)\n\nThe first edition of the book is no longer distributed with Rust's documentatio"
  },
  {
    "path": "first-edition/src/raw-pointers.md",
    "chars": 426,
    "preview": "# Raw Pointers\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here via "
  },
  {
    "path": "first-edition/src/references-and-borrowing.md",
    "chars": 435,
    "preview": "# References and Borrowing\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you ca"
  },
  {
    "path": "first-edition/src/release-channels.md",
    "chars": 391,
    "preview": "# Release Channels\n\nThe first edition of the book is no longer distributed with Rust's documentation.\n\nIf you came here "
  }
]

// ... and 1845 more files (download for full content)

About this extraction

This page contains the full source code of the rust-lang/book GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2045 files (3.3 MB), approximately 978.5k tokens, and a symbol index with 1666 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!