gitextract_wyjk7nt0/ ├── .cargo/ │ └── config.toml ├── .github/ │ ├── CODEOWNERS │ ├── dependabot.yml │ ├── labeler.yml │ ├── pandoc/ │ │ ├── README.md │ │ ├── ja.yaml │ │ ├── ko.yaml │ │ ├── zh-CN.yaml │ │ └── zh-TW.yaml │ ├── typos.toml │ └── workflows/ │ ├── apt-get-install/ │ │ └── action.yml │ ├── build.sh │ ├── build.yml │ ├── check-msgid-changes.py │ ├── check-msgid-changes.yml │ ├── install-mdbook/ │ │ └── action.yml │ ├── labeler.yml │ ├── lint.yml │ ├── publish.yml │ └── setup-rust-cache/ │ └── action.yml ├── .gitignore ├── CONTRIBUTING.md ├── Cargo.toml ├── GEMINI.md ├── LICENSE ├── LICENSE-CC-BY ├── README.md ├── STYLE.md ├── TRANSLATIONS.md ├── book.toml ├── dprint.json ├── mdbook-course/ │ ├── Cargo.toml │ ├── README.md │ └── src/ │ ├── bin/ │ │ ├── course-content.rs │ │ ├── course-schedule.rs │ │ └── mdbook-course.rs │ ├── course.rs │ ├── frontmatter.rs │ ├── lib.rs │ ├── markdown.rs │ ├── replacements.rs │ └── timing_info.rs ├── mdbook-exerciser/ │ ├── Cargo.toml │ ├── README.md │ └── src/ │ ├── lib.rs │ └── main.rs ├── po/ │ ├── ar.po │ ├── bn.po │ ├── da.po │ ├── de.po │ ├── el.po │ ├── es.po │ ├── fa.po │ ├── fr.po │ ├── id.po │ ├── it.po │ ├── ja.po │ ├── ko.po │ ├── pl.po │ ├── pt-BR.po │ ├── ro.po │ ├── ru.po │ ├── tr.po │ ├── uk.po │ ├── vi.po │ ├── zh-CN.po │ └── zh-TW.po ├── rustfmt.toml ├── src/ │ ├── README.md │ ├── SUMMARY.md │ ├── android/ │ │ ├── aidl/ │ │ │ ├── birthday-service.md │ │ │ ├── birthday_service/ │ │ │ │ ├── Android.bp │ │ │ │ ├── aidl/ │ │ │ │ │ ├── Android.bp │ │ │ │ │ └── com/ │ │ │ │ │ └── example/ │ │ │ │ │ └── birthdayservice/ │ │ │ │ │ ├── BirthdayInfo.aidl │ │ │ │ │ ├── IBirthdayInfoProvider.aidl │ │ │ │ │ └── IBirthdayService.aidl │ │ │ │ └── src/ │ │ │ │ ├── client.rs │ │ │ │ ├── lib.rs │ │ │ │ └── server.rs │ │ │ ├── example-service/ │ │ │ │ ├── changing-definition.md │ │ │ │ ├── changing-implementation.md │ │ │ │ ├── client.md │ │ │ │ ├── deploy.md │ │ │ │ ├── implementation.md │ │ │ │ ├── interface.md │ │ │ │ ├── server.md │ │ │ │ ├── service-bindings.md │ │ │ │ └── service.md │ │ │ ├── types/ │ │ │ │ ├── arrays.md │ │ │ │ ├── file-descriptor.md │ │ │ │ ├── objects.md │ │ │ │ ├── parcelables.md │ │ │ │ └── primitives.md │ │ │ └── types.md │ │ ├── aidl.md │ │ ├── bpfmt.sh │ │ ├── build-rules/ │ │ │ ├── binary/ │ │ │ │ ├── Android.bp │ │ │ │ └── src/ │ │ │ │ └── main.rs │ │ │ ├── binary.md │ │ │ ├── library/ │ │ │ │ ├── Android.bp │ │ │ │ └── src/ │ │ │ │ ├── lib.rs │ │ │ │ └── main.rs │ │ │ └── library.md │ │ ├── build-rules.md │ │ ├── build_all.sh │ │ ├── interoperability/ │ │ │ ├── cpp/ │ │ │ │ ├── android-build-cpp.md │ │ │ │ ├── android-build-rust.md │ │ │ │ ├── android-cpp-genrules.md │ │ │ │ ├── bridge.md │ │ │ │ ├── cpp-bridge.md │ │ │ │ ├── cpp-exception.md │ │ │ │ ├── generated-cpp.md │ │ │ │ ├── rust-bridge.md │ │ │ │ ├── rust-result.md │ │ │ │ ├── shared-enums.md │ │ │ │ ├── shared-types.md │ │ │ │ └── type-mapping.md │ │ │ ├── cpp.md │ │ │ ├── java/ │ │ │ │ ├── Android.bp │ │ │ │ ├── HelloWorld.java │ │ │ │ └── src/ │ │ │ │ └── lib.rs │ │ │ ├── java.md │ │ │ ├── with-c/ │ │ │ │ ├── bindgen/ │ │ │ │ │ ├── Android.bp │ │ │ │ │ ├── c-library.md │ │ │ │ │ ├── libbirthday.c │ │ │ │ │ ├── libbirthday.h │ │ │ │ │ ├── libbirthday_wrapper.h │ │ │ │ │ └── main.rs │ │ │ │ ├── bindgen.md │ │ │ │ ├── c-library.md │ │ │ │ ├── hand-written.md │ │ │ │ ├── run-our-binary.md │ │ │ │ ├── rust/ │ │ │ │ │ ├── analyze/ │ │ │ │ │ │ ├── Android.bp │ │ │ │ │ │ └── main.c │ │ │ │ │ └── libanalyze/ │ │ │ │ │ ├── Android.bp │ │ │ │ │ ├── analyze.h │ │ │ │ │ └── analyze.rs │ │ │ │ ├── rust-library.md │ │ │ │ └── rust.md │ │ │ └── with-c.md │ │ ├── interoperability.md │ │ ├── logging/ │ │ │ ├── Android.bp │ │ │ └── src/ │ │ │ └── main.rs │ │ ├── logging.md │ │ ├── setup.md │ │ ├── testing/ │ │ │ ├── Android.bp │ │ │ ├── Cargo.toml │ │ │ ├── googletest.md │ │ │ ├── googletest.rs │ │ │ ├── mockall.rs │ │ │ ├── mocking.md │ │ │ └── src/ │ │ │ └── lib.rs │ │ └── testing.md │ ├── android.md │ ├── bare-metal/ │ │ ├── alloc-example/ │ │ │ ├── .cargo/ │ │ │ │ └── config.toml │ │ │ ├── Cargo.toml │ │ │ └── src/ │ │ │ └── main.rs │ │ ├── alloc.md │ │ ├── android/ │ │ │ └── vmbase.md │ │ ├── android.md │ │ ├── aps/ │ │ │ ├── aarch64-rt/ │ │ │ │ └── exceptions.md │ │ │ ├── aarch64-rt.md │ │ │ ├── better-uart/ │ │ │ │ ├── bitflags.md │ │ │ │ ├── driver.md │ │ │ │ └── registers.md │ │ │ ├── better-uart.md │ │ │ ├── entry-point.md │ │ │ ├── examples/ │ │ │ │ ├── .cargo/ │ │ │ │ │ └── config.toml │ │ │ │ ├── Cargo.toml │ │ │ │ ├── Makefile │ │ │ │ ├── image.ld │ │ │ │ └── src/ │ │ │ │ ├── asm.rs │ │ │ │ ├── entry.S │ │ │ │ ├── exceptions.S │ │ │ │ ├── exceptions.rs │ │ │ │ ├── exceptions_rt.rs │ │ │ │ ├── idmap.S │ │ │ │ ├── logger.rs │ │ │ │ ├── main_improved.rs │ │ │ │ ├── main_logger.rs │ │ │ │ ├── main_minimal.rs │ │ │ │ ├── main_psci.rs │ │ │ │ ├── main_rt.rs │ │ │ │ ├── main_safemmio.rs │ │ │ │ ├── pl011.rs │ │ │ │ ├── pl011_minimal.rs │ │ │ │ └── pl011_struct.rs │ │ │ ├── exceptions.md │ │ │ ├── inline-assembly.md │ │ │ ├── logging/ │ │ │ │ └── using.md │ │ │ ├── logging.md │ │ │ ├── mmio.md │ │ │ ├── other-projects.md │ │ │ ├── safemmio/ │ │ │ │ ├── driver.md │ │ │ │ ├── registers.md │ │ │ │ └── using.md │ │ │ ├── uart/ │ │ │ │ ├── traits.md │ │ │ │ └── using.md │ │ │ └── uart.md │ │ ├── aps.md │ │ ├── microcontrollers/ │ │ │ ├── board-support.md │ │ │ ├── debugging.md │ │ │ ├── embedded-hal.md │ │ │ ├── examples/ │ │ │ │ ├── .cargo/ │ │ │ │ │ └── config.toml │ │ │ │ ├── Cargo.toml │ │ │ │ ├── Embed.toml │ │ │ │ └── src/ │ │ │ │ └── bin/ │ │ │ │ ├── board_support.rs │ │ │ │ ├── hal.rs │ │ │ │ ├── interrupts/ │ │ │ │ │ └── mod.rs │ │ │ │ ├── minimal.rs │ │ │ │ ├── mmio.rs │ │ │ │ ├── pac.rs │ │ │ │ └── typestate.rs │ │ │ ├── hals.md │ │ │ ├── mmio.md │ │ │ ├── other-projects.md │ │ │ ├── pacs.md │ │ │ ├── probe-rs.md │ │ │ └── type-state.md │ │ ├── microcontrollers.md │ │ ├── minimal.md │ │ ├── no_std.md │ │ ├── useful-crates/ │ │ │ ├── aarch64-paging.md │ │ │ ├── allocator-example/ │ │ │ │ ├── Cargo.toml │ │ │ │ └── src/ │ │ │ │ └── main.rs │ │ │ ├── buddy_system_allocator.md │ │ │ ├── spin.md │ │ │ ├── tinyvec.md │ │ │ ├── zerocopy-example/ │ │ │ │ ├── Cargo.toml │ │ │ │ └── src/ │ │ │ │ └── main.rs │ │ │ └── zerocopy.md │ │ └── useful-crates.md │ ├── bare-metal.md │ ├── borrowing/ │ │ ├── Cargo.toml │ │ ├── borrowck.md │ │ ├── examples.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── interior-mutability/ │ │ │ ├── cell.md │ │ │ └── refcell.md │ │ ├── interior-mutability.md │ │ ├── shared.md │ │ └── solution.md │ ├── borrowing.md │ ├── cargo/ │ │ ├── code-samples.md │ │ ├── running-locally.md │ │ └── rust-ecosystem.md │ ├── cargo.md │ ├── chromium/ │ │ ├── adding-third-party-crates/ │ │ │ ├── checking-in.md │ │ │ ├── configuring-cargo-toml.md │ │ │ ├── configuring-gnrt-config-toml.md │ │ │ ├── depending-on-a-crate.md │ │ │ ├── downloading-crates.md │ │ │ ├── generating-gn-build-rules.md │ │ │ ├── keeping-up-to-date.md │ │ │ ├── resolving-problems/ │ │ │ │ ├── build-scripts-which-generate-code.md │ │ │ │ └── build-scripts-which-take-arbitrary-actions.md │ │ │ ├── resolving-problems.md │ │ │ └── reviews-and-audits.md │ │ ├── adding-third-party-crates.md │ │ ├── build-rules/ │ │ │ ├── depending.md │ │ │ ├── unsafe.md │ │ │ └── vscode.md │ │ ├── build-rules.md │ │ ├── cargo.md │ │ ├── interoperability-with-cpp/ │ │ │ ├── error-handling-png.md │ │ │ ├── error-handling-qr.md │ │ │ ├── error-handling.md │ │ │ ├── example-bindings.md │ │ │ ├── limitations-of-cxx.md │ │ │ └── using-cxx-in-chromium.md │ │ ├── interoperability-with-cpp.md │ │ ├── policy.md │ │ ├── setup.md │ │ ├── testing/ │ │ │ ├── build-gn.md │ │ │ ├── chromium-import-macro.md │ │ │ └── rust-gtest-interop.md │ │ └── testing.md │ ├── chromium.md │ ├── closures/ │ │ ├── capturing.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── solution.md │ │ ├── syntax.md │ │ └── traits.md │ ├── closures.md │ ├── concurrency/ │ │ ├── async/ │ │ │ ├── async-await.md │ │ │ ├── futures.md │ │ │ ├── runtimes/ │ │ │ │ └── tokio.md │ │ │ ├── runtimes.md │ │ │ ├── state-machine.md │ │ │ └── tasks.md │ │ ├── async-control-flow/ │ │ │ ├── channels.md │ │ │ ├── join.md │ │ │ └── select.md │ │ ├── async-control-flow.md │ │ ├── async-exercises/ │ │ │ ├── afternoon.md │ │ │ ├── chat-app.md │ │ │ ├── chat-async/ │ │ │ │ ├── Cargo.toml │ │ │ │ └── src/ │ │ │ │ └── bin/ │ │ │ │ ├── client.rs │ │ │ │ └── server.rs │ │ │ ├── dining-philosophers.md │ │ │ ├── dining-philosophers.rs │ │ │ └── solutions.md │ │ ├── async-exercises.md │ │ ├── async-pitfalls/ │ │ │ ├── async-traits.md │ │ │ ├── blocking-executor.md │ │ │ ├── cancellation.md │ │ │ └── pin.md │ │ ├── async-pitfalls.md │ │ ├── async.md │ │ ├── channels/ │ │ │ ├── bounded.md │ │ │ ├── senders-receivers.md │ │ │ └── unbounded.md │ │ ├── channels.md │ │ ├── send-sync/ │ │ │ ├── examples.md │ │ │ ├── marker-traits.md │ │ │ ├── send.md │ │ │ └── sync.md │ │ ├── send-sync.md │ │ ├── shared-state/ │ │ │ ├── arc.md │ │ │ ├── example.md │ │ │ └── mutex.md │ │ ├── shared-state.md │ │ ├── sync-exercises/ │ │ │ ├── Cargo.toml │ │ │ ├── dining-philosophers.md │ │ │ ├── dining-philosophers.rs │ │ │ ├── link-checker.md │ │ │ ├── link-checker.rs │ │ │ └── solutions.md │ │ ├── sync-exercises.md │ │ ├── threads/ │ │ │ ├── plain.md │ │ │ └── scoped.md │ │ ├── threads.md │ │ ├── welcome-async.md │ │ └── welcome.md │ ├── control-flow-basics/ │ │ ├── Cargo.toml │ │ ├── blocks-and-scopes.md │ │ ├── break-continue/ │ │ │ └── labels.md │ │ ├── break-continue.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── functions.md │ │ ├── if.md │ │ ├── loops/ │ │ │ ├── for.md │ │ │ └── loop.md │ │ ├── loops.md │ │ ├── macros.md │ │ ├── match.md │ │ └── solution.md │ ├── control-flow-basics.md │ ├── credits.md │ ├── error-handling/ │ │ ├── Cargo.toml │ │ ├── anyhow.md │ │ ├── error.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── panics.md │ │ ├── result.md │ │ ├── solution.md │ │ ├── thiserror.md │ │ ├── try-conversions.md │ │ └── try.md │ ├── error-handling.md │ ├── exercises/ │ │ ├── bare-metal/ │ │ │ ├── afternoon.md │ │ │ ├── compass/ │ │ │ │ ├── .cargo/ │ │ │ │ │ └── config.toml │ │ │ │ ├── Cargo.toml │ │ │ │ ├── Embed.toml │ │ │ │ └── src/ │ │ │ │ └── main.rs │ │ │ ├── compass.md │ │ │ ├── morning.md │ │ │ ├── rtc/ │ │ │ │ ├── .cargo/ │ │ │ │ │ └── config.toml │ │ │ │ ├── Cargo.toml │ │ │ │ ├── Makefile │ │ │ │ ├── build.rs │ │ │ │ ├── memory.ld │ │ │ │ └── src/ │ │ │ │ ├── exceptions.rs │ │ │ │ ├── logger.rs │ │ │ │ ├── main.rs │ │ │ │ └── pl031.rs │ │ │ ├── rtc.md │ │ │ ├── solutions-afternoon.md │ │ │ └── solutions-morning.md │ │ └── chromium/ │ │ ├── bringing-it-together.md │ │ ├── build-rules.md │ │ ├── interoperability-with-cpp.md │ │ ├── solutions.md │ │ ├── testing.md │ │ └── third-party.md │ ├── generics/ │ │ ├── Cargo.toml │ │ ├── dyn-trait.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── generic-data.md │ │ ├── generic-functions.md │ │ ├── generic-traits.md │ │ ├── impl-trait.md │ │ ├── solution.md │ │ └── trait-bounds.md │ ├── generics.md │ ├── glossary.md │ ├── hello-world/ │ │ ├── benefits.md │ │ ├── playground.md │ │ └── what-is-rust.md │ ├── hello-world.md │ ├── idiomatic/ │ │ ├── foundations-api-design/ │ │ │ ├── meaningful-doc-comments/ │ │ │ │ ├── anatomy-of-a-doc-comment.md │ │ │ │ ├── avoid-redundancy.md │ │ │ │ ├── exercise.md │ │ │ │ ├── library-vs-application-docs.md │ │ │ │ ├── name-drop-signpost.md │ │ │ │ ├── what-isnt-docs.md │ │ │ │ ├── what-why-not-how-where.md │ │ │ │ └── who-are-you-writing-for.md │ │ │ ├── meaningful-doc-comments.md │ │ │ ├── predictable-api/ │ │ │ │ ├── common-traits/ │ │ │ │ │ ├── clone.md │ │ │ │ │ ├── copy.md │ │ │ │ │ ├── debug.md │ │ │ │ │ ├── display.md │ │ │ │ │ ├── from-into.md │ │ │ │ │ ├── hash.md │ │ │ │ │ ├── partialeq-eq.md │ │ │ │ │ ├── partialord-ord.md │ │ │ │ │ ├── serde.md │ │ │ │ │ └── try-from-into.md │ │ │ │ ├── common-traits.md │ │ │ │ ├── naming-conventions/ │ │ │ │ │ ├── as-and-ref.md │ │ │ │ │ ├── by.md │ │ │ │ │ ├── exercise.md │ │ │ │ │ ├── from.md │ │ │ │ │ ├── get.md │ │ │ │ │ ├── into.md │ │ │ │ │ ├── into_inner.md │ │ │ │ │ ├── is.md │ │ │ │ │ ├── mut.md │ │ │ │ │ ├── new.md │ │ │ │ │ ├── push.md │ │ │ │ │ ├── raw_parts.md │ │ │ │ │ ├── to.md │ │ │ │ │ ├── try.md │ │ │ │ │ ├── unchecked.md │ │ │ │ │ ├── with-closure.md │ │ │ │ │ ├── with-constructor.md │ │ │ │ │ ├── with-copy-setter.md │ │ │ │ │ └── with-word.md │ │ │ │ └── naming-conventions.md │ │ │ └── predictable-api.md │ │ ├── foundations-api-design.md │ │ ├── leveraging-the-type-system/ │ │ │ ├── borrow-checker-invariants/ │ │ │ │ ├── aliasing-xor-mutability.md │ │ │ │ ├── generalizing-ownership.md │ │ │ │ ├── phantomdata-01-types.md │ │ │ │ ├── phantomdata-02-types-implemented.md │ │ │ │ ├── phantomdata-03-lifetimes.md │ │ │ │ ├── phantomdata-04-borrowedfd.md │ │ │ │ └── single-use-values.md │ │ │ ├── borrow-checker-invariants.md │ │ │ ├── extension-traits/ │ │ │ │ ├── extending-foreign-types.md │ │ │ │ ├── extending-other-traits.md │ │ │ │ ├── method-resolution-conflicts.md │ │ │ │ ├── should-i-define-an-extension-trait.md │ │ │ │ └── trait-method-conflicts.md │ │ │ ├── extension-traits.md │ │ │ ├── newtype-pattern/ │ │ │ │ ├── is-it-encapsulated.md │ │ │ │ ├── parse-don-t-validate.md │ │ │ │ └── semantic-confusion.md │ │ │ ├── newtype-pattern.md │ │ │ ├── raii/ │ │ │ │ ├── drop_bomb.md │ │ │ │ ├── drop_bomb_forget.md │ │ │ │ ├── drop_guards.md │ │ │ │ ├── drop_option.md │ │ │ │ ├── drop_skipped.md │ │ │ │ ├── forget_and_drop.md │ │ │ │ ├── mutex.md │ │ │ │ └── scope_guard.md │ │ │ ├── raii.md │ │ │ ├── token-types/ │ │ │ │ ├── branded-01-motivation.md │ │ │ │ ├── branded-02-phantomdata.md │ │ │ │ ├── branded-03-impl.md │ │ │ │ ├── branded-04-in-action.md │ │ │ │ ├── mutex-guard.md │ │ │ │ └── permission-tokens.md │ │ │ ├── token-types.md │ │ │ ├── typestate-pattern/ │ │ │ │ ├── typestate-advanced.md │ │ │ │ ├── typestate-example.md │ │ │ │ ├── typestate-generics/ │ │ │ │ │ ├── complete.md │ │ │ │ │ ├── property.md │ │ │ │ │ ├── root.md │ │ │ │ │ └── struct.md │ │ │ │ ├── typestate-generics.md │ │ │ │ └── typestate-generics.rs │ │ │ └── typestate-pattern.md │ │ ├── leveraging-the-type-system.md │ │ ├── polymorphism/ │ │ │ ├── from-oop-to-rust/ │ │ │ │ ├── composition.md │ │ │ │ ├── dynamic-dispatch/ │ │ │ │ │ ├── any-trait.md │ │ │ │ │ ├── dyn-compatible.md │ │ │ │ │ ├── dyn-trait.md │ │ │ │ │ ├── dyn-vs-generics.md │ │ │ │ │ ├── heterogeneous.md │ │ │ │ │ ├── limits.md │ │ │ │ │ └── pitfalls.md │ │ │ │ ├── inheritance.md │ │ │ │ ├── problem-solving.md │ │ │ │ ├── sealed-traits.md │ │ │ │ ├── sealing-with-enums.md │ │ │ │ ├── sticking-with-traits.md │ │ │ │ ├── supertraits.md │ │ │ │ ├── switch-perspective.md │ │ │ │ └── why-no-inheritance.md │ │ │ ├── from-oop-to-rust.md │ │ │ ├── refresher/ │ │ │ │ ├── blanket-impls.md │ │ │ │ ├── conditional-methods.md │ │ │ │ ├── default-impls.md │ │ │ │ ├── deriving-traits.md │ │ │ │ ├── monomorphization.md │ │ │ │ ├── orphan-rule.md │ │ │ │ ├── sized.md │ │ │ │ ├── supertraits.md │ │ │ │ ├── trait-bounds.md │ │ │ │ └── traits.md │ │ │ └── refresher.md │ │ ├── polymorphism.md │ │ └── welcome.md │ ├── index.md │ ├── iterators/ │ │ ├── Cargo.toml │ │ ├── collect.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── helpers.md │ │ ├── intoiterator.md │ │ ├── iterator.md │ │ ├── motivation.md │ │ └── solution.md │ ├── iterators.md │ ├── lifetimes/ │ │ ├── Cargo.toml │ │ ├── borrow-both.md │ │ ├── borrow-one.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── lifetime-elision.md │ │ ├── multiple-borrows.md │ │ ├── returning-borrows.md │ │ ├── simple-borrows.md │ │ ├── solution.md │ │ └── struct-lifetimes.md │ ├── lifetimes.md │ ├── memory-management/ │ │ ├── Cargo.toml │ │ ├── approaches.md │ │ ├── clone.md │ │ ├── copy-types.md │ │ ├── drop.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── move.md │ │ ├── ownership.md │ │ ├── review.md │ │ └── solution.md │ ├── memory-management.md │ ├── methods-and-traits/ │ │ ├── Cargo.toml │ │ ├── deriving.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── methods.md │ │ ├── solution.md │ │ ├── traits/ │ │ │ ├── associated-types.md │ │ │ ├── implementing.md │ │ │ └── supertraits.md │ │ └── traits.md │ ├── methods-and-traits.md │ ├── modules/ │ │ ├── Cargo.toml │ │ ├── encapsulation.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── filesystem.md │ │ ├── modules.md │ │ ├── paths.md │ │ ├── solution.md │ │ └── visibility.md │ ├── modules.md │ ├── other-resources.md │ ├── pattern-matching/ │ │ ├── Cargo.toml │ │ ├── destructuring-enums.md │ │ ├── destructuring-structs.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── infallible.md │ │ ├── let-control-flow/ │ │ │ ├── if-let.md │ │ │ ├── let-else.md │ │ │ └── while-let.md │ │ ├── let-control-flow.md │ │ ├── match.md │ │ └── solution.md │ ├── pattern-matching.md │ ├── references/ │ │ ├── Cargo.toml │ │ ├── dangling.md │ │ ├── exclusive.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── shared.md │ │ ├── slices.md │ │ ├── solution.md │ │ └── strings.md │ ├── references.md │ ├── running-the-course/ │ │ ├── course-structure.md │ │ ├── keyboard-shortcuts.md │ │ └── translations.md │ ├── running-the-course.md │ ├── smart-pointers/ │ │ ├── Cargo.toml │ │ ├── box.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── rc.md │ │ ├── solution.md │ │ └── trait-objects.md │ ├── smart-pointers.md │ ├── std-traits/ │ │ ├── Cargo.toml │ │ ├── casting.md │ │ ├── comparisons.md │ │ ├── default.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── from-and-into.md │ │ ├── operators.md │ │ ├── read-and-write.md │ │ └── solution.md │ ├── std-traits.md │ ├── std-types/ │ │ ├── Cargo.toml │ │ ├── docs.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── hashmap.md │ │ ├── option.md │ │ ├── result.md │ │ ├── solution.md │ │ ├── std.md │ │ ├── string.md │ │ └── vec.md │ ├── std-types.md │ ├── testing/ │ │ ├── Cargo.toml │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── lints.md │ │ ├── other.md │ │ ├── solution.md │ │ └── unit-tests.md │ ├── testing.md │ ├── thanks.md │ ├── tuples-and-arrays/ │ │ ├── Cargo.toml │ │ ├── arrays.md │ │ ├── destructuring.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── iteration.md │ │ ├── solution.md │ │ └── tuples.md │ ├── tuples-and-arrays.md │ ├── types-and-values/ │ │ ├── Cargo.toml │ │ ├── arithmetic.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── hello-world.md │ │ ├── inference.md │ │ ├── solution.md │ │ ├── values.md │ │ └── variables.md │ ├── types-and-values.md │ ├── unsafe-deep-dive/ │ │ ├── Cargo.toml │ │ ├── case-studies/ │ │ │ └── intrusive-linked-list.md │ │ ├── case-studies.md │ │ ├── ffi/ │ │ │ ├── README.md │ │ │ ├── abs.md │ │ │ ├── c-library-example.md │ │ │ ├── cpp-library-example.md │ │ │ ├── language-differences/ │ │ │ │ ├── cpp-and-c.md │ │ │ │ ├── representations.md │ │ │ │ ├── rust-and-c.md │ │ │ │ ├── rust-and-cpp.md │ │ │ │ └── semantics.md │ │ │ ├── language-differences.md │ │ │ ├── language-interop.md │ │ │ ├── rand.md │ │ │ ├── strategies.md │ │ │ └── type-safety.md │ │ ├── ffi.md │ │ ├── initialization/ │ │ │ ├── how-to-initialize-memory.md │ │ │ ├── maybeuninit/ │ │ │ │ ├── arrays.md │ │ │ │ ├── write-vs-assignment.md │ │ │ │ └── zeroed-method.md │ │ │ ├── maybeuninit.md │ │ │ └── partial-initialization.md │ │ ├── initialization.md │ │ ├── introduction/ │ │ │ ├── characteristics-of-unsafe-rust/ │ │ │ │ ├── dangerous.md │ │ │ │ ├── sometimes-necessary.md │ │ │ │ └── sometimes-useful.md │ │ │ ├── characteristics-of-unsafe-rust.md │ │ │ ├── defining-unsafe-rust.md │ │ │ ├── definition.md │ │ │ ├── impact-on-workflow.md │ │ │ ├── may_overflow.md │ │ │ ├── purpose.md │ │ │ ├── responsibility-shift.md │ │ │ ├── two-roles.md │ │ │ ├── warm-up/ │ │ │ │ ├── unsafe-block.md │ │ │ │ ├── unsafe-fn.md │ │ │ │ ├── unsafe-impl.md │ │ │ │ └── unsafe-trait.md │ │ │ └── warm-up.md │ │ ├── introduction.md │ │ ├── memory-lifecycle.md │ │ ├── motivations.md │ │ ├── pinning/ │ │ │ ├── README.md │ │ │ ├── definition-of-pin.md │ │ │ ├── drop-and-not-unpin-worked-example.md │ │ │ ├── phantompinned.md │ │ │ ├── pin-and-drop.md │ │ │ ├── self-referential-buffer/ │ │ │ │ ├── cpp.md │ │ │ │ ├── rust-offset.md │ │ │ │ ├── rust-pin.md │ │ │ │ ├── rust-raw-pointers.md │ │ │ │ └── rust.md │ │ │ ├── self-referential-buffer.md │ │ │ ├── unpin-trait.md │ │ │ ├── what-a-move-is.md │ │ │ ├── what-pinning-is.md │ │ │ └── why-difficult.md │ │ ├── pinning.md │ │ ├── rules-of-the-game/ │ │ │ ├── 3-shapes-of-sound-rust.md │ │ │ ├── copying-memory/ │ │ │ │ ├── crying-wolf.md │ │ │ │ ├── documented-safety-preconditions.md │ │ │ │ ├── encapsulated-unsafe.md │ │ │ │ ├── exposed-unsafe.md │ │ │ │ └── safe.md │ │ │ ├── copying-memory.md │ │ │ ├── rust-is-sound.md │ │ │ ├── soundness-proof/ │ │ │ │ ├── corollary.md │ │ │ │ ├── soundness.md │ │ │ │ └── unsoundness.md │ │ │ └── soundness-proof.md │ │ ├── rules-of-the-game.md │ │ ├── safety-preconditions/ │ │ │ ├── ascii.md │ │ │ ├── common-preconditions.md │ │ │ ├── defining.md │ │ │ ├── determining.md │ │ │ ├── getter.md │ │ │ ├── references.md │ │ │ ├── semantic-preconditions.md │ │ │ └── u8-to-bool.md │ │ ├── safety-preconditions.md │ │ ├── setup.md │ │ └── welcome.md │ ├── unsafe-rust/ │ │ ├── Cargo.toml │ │ ├── dereferencing.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── mutable-static.md │ │ ├── solution.md │ │ ├── unions.md │ │ ├── unsafe-functions/ │ │ │ ├── calling.md │ │ │ ├── extern-c.md │ │ │ └── rust.md │ │ ├── unsafe-functions.md │ │ ├── unsafe-traits.md │ │ └── unsafe.md │ ├── unsafe-rust.md │ ├── user-defined-types/ │ │ ├── Cargo.toml │ │ ├── aliases.md │ │ ├── const.md │ │ ├── enums.md │ │ ├── exercise.md │ │ ├── exercise.rs │ │ ├── named-structs.md │ │ ├── solution.md │ │ ├── static.md │ │ └── tuple-structs.md │ ├── user-defined-types.md │ ├── welcome-day-1-afternoon.md │ ├── welcome-day-1.md │ ├── welcome-day-2-afternoon.md │ ├── welcome-day-2.md │ ├── welcome-day-3-afternoon.md │ ├── welcome-day-3.md │ ├── welcome-day-4-afternoon.md │ └── welcome-day-4.md ├── tests/ │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── generic-page.test.ts │ │ ├── objects/ │ │ │ ├── playground.ts │ │ │ └── slide.ts │ │ ├── playground.test.ts │ │ ├── redbox.test.ts │ │ ├── slide-style-guide.test.ts │ │ ├── slides/ │ │ │ ├── slide-exemptions.list.ts │ │ │ └── slides.list.ts │ │ └── speaker-notes.test.ts │ ├── tsconfig.json │ ├── wdio.conf-mdbook.ts │ └── wdio.conf.ts ├── theme/ │ ├── book.js │ ├── css/ │ │ ├── language-picker.css │ │ ├── redbox.css │ │ ├── rtl.css │ │ ├── speaker-notes.css │ │ └── svgbob.css │ ├── head.hbs │ ├── index.hbs │ ├── redbox.js │ ├── save-playgrounds.js │ └── speaker-notes.js ├── third_party/ │ ├── README.md │ ├── cxx/ │ │ ├── LICENSE-APACHE │ │ ├── LICENSE-MIT │ │ ├── README.md │ │ ├── blobstore/ │ │ │ ├── Android.bp │ │ │ ├── BUILD │ │ │ ├── Cargo.toml │ │ │ ├── build.rs │ │ │ ├── include/ │ │ │ │ └── blobstore.h │ │ │ └── src/ │ │ │ ├── blobstore.cc │ │ │ └── main.rs │ │ └── book/ │ │ ├── snippets.cc │ │ └── snippets.rs │ └── mdbook/ │ ├── LICENSE │ └── README.md └── xtask/ ├── Cargo.toml ├── README.md └── src/ └── main.rs