Β§2024-06-24

ΒΆMacOS/Linux

Just run:

curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.sh | bash

This will create a folder in the current directory called rustlings, so be sure to switch to whatever location you want to use to keep things organized.

Then

$ which rustlings
/home/alexlai/.cargo/bin/rustlings
$ tree ~/rustlings/
/home/alexlai/rustlings/
β”œβ”€β”€ AUTHORS.md
β”œβ”€β”€ Cargo.lock
β”œβ”€β”€ Cargo.toml
β”œβ”€β”€ CHANGELOG.md
β”œβ”€β”€ CONTRIBUTING.md
β”œβ”€β”€ exercises
β”‚Β Β  β”œβ”€β”€ clippy
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ clippy1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ clippy2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ clippy3.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ conversions
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ as_ref_mut.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ from_into.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ from_str.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ try_from_into.rs
β”‚Β Β  β”‚Β Β  └── using_as.rs
β”‚Β Β  β”œβ”€β”€ enums
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ enums1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ enums2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ enums3.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ error_handling
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ errors1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ errors2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ errors3.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ errors4.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ errors5.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ errors6.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ functions
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ functions1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ functions2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ functions3.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ functions4.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ functions5.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ generics
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ generics1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ generics2.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ hashmaps
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ hashmaps1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ hashmaps2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ hashmaps3.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ if
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ if1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ if2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ if3.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ intro
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ intro1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ intro2.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ iterators
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ iterators1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ iterators2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ iterators3.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ iterators4.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ iterators5.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ lifetimes
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ lifetimes1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ lifetimes2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ lifetimes3.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ macros
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ macros1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ macros2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ macros3.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ macros4.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ modules
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ modules1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ modules2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ modules3.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ move_semantics
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ move_semantics1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ move_semantics2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ move_semantics3.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ move_semantics4.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ move_semantics5.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ move_semantics6.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ options
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ options1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ options2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ options3.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ primitive_types
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ primitive_types1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ primitive_types2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ primitive_types3.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ primitive_types4.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ primitive_types5.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ primitive_types6.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ quiz1.rs
β”‚Β Β  β”œβ”€β”€ quiz2.rs
β”‚Β Β  β”œβ”€β”€ quiz3.rs
β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”œβ”€β”€ smart_pointers
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ arc1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ box1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ cow1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ rc1.rs
β”‚Β Β  β”‚Β Β  └── README.md
β”‚Β Β  β”œβ”€β”€ strings
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ strings1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ strings2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ strings3.rs
β”‚Β Β  β”‚Β Β  └── strings4.rs
β”‚Β Β  β”œβ”€β”€ structs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ structs1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ structs2.rs
β”‚Β Β  β”‚Β Β  └── structs3.rs
β”‚Β Β  β”œβ”€β”€ tests
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ tests1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ tests2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ tests3.rs
β”‚Β Β  β”‚Β Β  └── tests4.rs
β”‚Β Β  β”œβ”€β”€ threads
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ threads1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ threads2.rs
β”‚Β Β  β”‚Β Β  └── threads3.rs
β”‚Β Β  β”œβ”€β”€ traits
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ traits1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ traits2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ traits3.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ traits4.rs
β”‚Β Β  β”‚Β Β  └── traits5.rs
β”‚Β Β  β”œβ”€β”€ variables
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ variables1.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ variables2.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ variables3.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ variables4.rs
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ variables5.rs
β”‚Β Β  β”‚Β Β  └── variables6.rs
β”‚Β Β  └── vecs
β”‚Β Β      β”œβ”€β”€ README.md
β”‚Β Β      β”œβ”€β”€ vecs1.rs
β”‚Β Β      └── vecs2.rs
β”œβ”€β”€ flake.lock
β”œβ”€β”€ flake.nix
β”œβ”€β”€ info.toml
β”œβ”€β”€ install.ps1
β”œβ”€β”€ install.sh
β”œβ”€β”€ LICENSE
β”œβ”€β”€ oranda.json
β”œβ”€β”€ README.md
β”œβ”€β”€ shell.nix
β”œβ”€β”€ src
β”‚Β Β  β”œβ”€β”€ exercise.rs
β”‚Β Β  β”œβ”€β”€ main.rs
β”‚Β Β  β”œβ”€β”€ project.rs
β”‚Β Β  β”œβ”€β”€ run.rs
β”‚Β Β  β”œβ”€β”€ ui.rs
β”‚Β Β  └── verify.rs
β”œβ”€β”€ target
β”‚Β Β  β”œβ”€β”€ CACHEDIR.TAG
β”‚Β Β  └── release
β”‚Β Β      β”œβ”€β”€ build
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libc-137edcf4c3fba36d
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ invoked.timestamp
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ out
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ output
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ root-output
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── stderr
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libc-13dd37895401f1aa
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build-script-build
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build_script_build-13dd37895401f1aa
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── build_script_build-13dd37895401f1aa.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ log-ac98eecacd8b2e02
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ invoked.timestamp
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ out
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ output
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ root-output
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── stderr
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ log-edd6d1fe679d3dac
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build-script-build
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build_script_build-edd6d1fe679d3dac
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── build_script_build-edd6d1fe679d3dac.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ portable-atomic-16d7c4979bce940e
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ invoked.timestamp
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ out
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ output
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ root-output
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── stderr
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ portable-atomic-24572b3621a419a7
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build-script-build
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build_script_build-24572b3621a419a7
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── build_script_build-24572b3621a419a7.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ proc-macro2-2a1c14b579c4994c
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ invoked.timestamp
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ out
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ output
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ root-output
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── stderr
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ proc-macro2-93b164b06d6f8ff9
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build-script-build
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build_script_build-93b164b06d6f8ff9
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── build_script_build-93b164b06d6f8ff9.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ quote-23ce6b7dfb4c296d
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ invoked.timestamp
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ out
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ output
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ root-output
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── stderr
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ quote-a5390ff22875e334
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build-script-build
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build_script_build-a5390ff22875e334
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── build_script_build-a5390ff22875e334.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ serde-237ccf37e9382a14
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build-script-build
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build_script_build-237ccf37e9382a14
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── build_script_build-237ccf37e9382a14.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ serde-b3ebe12921ea63d1
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ invoked.timestamp
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ out
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ output
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ root-output
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── stderr
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ serde_derive-80bc99193515adda
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build-script-build
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build_script_build-80bc99193515adda
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── build_script_build-80bc99193515adda.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ serde_derive-fbf8e10b69ef63a7
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ invoked.timestamp
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ out
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ output
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ root-output
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── stderr
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ serde_json-8ef3238e2d705b40
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ invoked.timestamp
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ out
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ output
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ root-output
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── stderr
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ serde_json-b4495d3405e5320f
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build-script-build
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ build_script_build-b4495d3405e5320f
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── build_script_build-b4495d3405e5320f.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ slab-5788ba0e9685763a
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ invoked.timestamp
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ out
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”‚Β Β  └── probe0.ll
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ output
β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ root-output
β”‚Β Β      β”‚Β Β  β”‚Β Β  └── stderr
β”‚Β Β      β”‚Β Β  └── slab-debc6a4c64ca38cc
β”‚Β Β      β”‚Β Β      β”œβ”€β”€ build-script-build
β”‚Β Β      β”‚Β Β      β”œβ”€β”€ build_script_build-debc6a4c64ca38cc
β”‚Β Β      β”‚Β Β      └── build_script_build-debc6a4c64ca38cc.d
β”‚Β Β      β”œβ”€β”€ deps
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ aho_corasick-96d237fb3c287d7a.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ anstream-20bf192ff1bed530.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ anstyle-4a78f7c1d1b08568.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ anstyle_parse-52a9067d4c942508.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ anstyle_query-25c9f99a0f7b5652.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ autocfg-831d4ca292eee5d6.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ bitflags-c9f49548e3c37de9.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ cfg_if-22ef46fe85ecc493.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ cfg_if-c743cf0a66dac05b.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ clap-07fe5e10df3d7bd7.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ clap_builder-2d5aa0d5cbb38f61.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ clap_derive-ce5ad98c71dc3498.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ clap_lex-bf65de938a07239f.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ colorchoice-865d7838a50de6b6.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ console-06f277a3ee2ad3dc.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ equivalent-3e6ecf7ab8d4a815.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ filetime-bf4857c9cf72815c.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ glob-a6590f7181374bb3.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ hashbrown-2ea9692c85d8ec7c.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ heck-ce8a5f2220bf6de9.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ home-655975e49dfb49c7.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ indexmap-b0063f11b34a6962.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ indicatif-4117be1dd7450cfb.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ inotify-1d1237b997b98b7c.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ inotify_sys-2b0e08c7eb935fa1.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ iovec-9601b0749a32fec2.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ itoa-a39a3fffd9d4fb52.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ lazycell-be6f84df06a41827.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ lazy_static-567380670d619c3c.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libaho_corasick-96d237fb3c287d7a.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libaho_corasick-96d237fb3c287d7a.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libanstream-20bf192ff1bed530.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libanstream-20bf192ff1bed530.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libanstyle-4a78f7c1d1b08568.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libanstyle-4a78f7c1d1b08568.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libanstyle_parse-52a9067d4c942508.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libanstyle_parse-52a9067d4c942508.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libanstyle_query-25c9f99a0f7b5652.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libanstyle_query-25c9f99a0f7b5652.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libautocfg-831d4ca292eee5d6.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libautocfg-831d4ca292eee5d6.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libbitflags-c9f49548e3c37de9.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libbitflags-c9f49548e3c37de9.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libc-beb1ac36a781759c.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libcfg_if-22ef46fe85ecc493.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libcfg_if-22ef46fe85ecc493.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libcfg_if-c743cf0a66dac05b.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libcfg_if-c743cf0a66dac05b.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libclap-07fe5e10df3d7bd7.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libclap-07fe5e10df3d7bd7.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libclap_builder-2d5aa0d5cbb38f61.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libclap_builder-2d5aa0d5cbb38f61.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libclap_derive-ce5ad98c71dc3498.so
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libclap_lex-bf65de938a07239f.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libclap_lex-bf65de938a07239f.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libcolorchoice-865d7838a50de6b6.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libcolorchoice-865d7838a50de6b6.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libconsole-06f277a3ee2ad3dc.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libconsole-06f277a3ee2ad3dc.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libequivalent-3e6ecf7ab8d4a815.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libequivalent-3e6ecf7ab8d4a815.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libfiletime-bf4857c9cf72815c.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libfiletime-bf4857c9cf72815c.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libglob-a6590f7181374bb3.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libglob-a6590f7181374bb3.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libhashbrown-2ea9692c85d8ec7c.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libhashbrown-2ea9692c85d8ec7c.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libheck-ce8a5f2220bf6de9.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libheck-ce8a5f2220bf6de9.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libhome-655975e49dfb49c7.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libhome-655975e49dfb49c7.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libindexmap-b0063f11b34a6962.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libindexmap-b0063f11b34a6962.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libindicatif-4117be1dd7450cfb.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libindicatif-4117be1dd7450cfb.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libinotify-1d1237b997b98b7c.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libinotify-1d1237b997b98b7c.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libinotify_sys-2b0e08c7eb935fa1.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libinotify_sys-2b0e08c7eb935fa1.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libiovec-9601b0749a32fec2.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libiovec-9601b0749a32fec2.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libitoa-a39a3fffd9d4fb52.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libitoa-a39a3fffd9d4fb52.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ liblazycell-be6f84df06a41827.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ liblazycell-be6f84df06a41827.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ liblazy_static-567380670d619c3c.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ liblazy_static-567380670d619c3c.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ liblibc-beb1ac36a781759c.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ liblibc-beb1ac36a781759c.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ liblog-71eb742e7d074743.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ liblog-71eb742e7d074743.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libmemchr-3381c97883e9e6cb.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libmemchr-3381c97883e9e6cb.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libmio-d8e4c3bf5345ab4a.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libmio-d8e4c3bf5345ab4a.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libmio_extras-f40585c6e3cffe91.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libmio_extras-f40585c6e3cffe91.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libnet2-e5debbf2235aabd4.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libnet2-e5debbf2235aabd4.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libnotify-ccbd2c9fa44f14ee.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libnotify-ccbd2c9fa44f14ee.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libnumber_prefix-3ebe005462406dc0.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libnumber_prefix-3ebe005462406dc0.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libportable_atomic-a1cb6be183ff64ca.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libportable_atomic-a1cb6be183ff64ca.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libproc_macro2-42d5e56e18539f61.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libproc_macro2-42d5e56e18539f61.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libquote-cf1b0d624952025a.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libquote-cf1b0d624952025a.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libregex-6f2bede5d0b06e23.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libregex-6f2bede5d0b06e23.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libregex_syntax-5fb1cd753e21b1f1.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libregex_syntax-5fb1cd753e21b1f1.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libryu-62d671ac47bc7e87.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libryu-62d671ac47bc7e87.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libsame_file-9bf1eaa85ad1aa05.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libsame_file-9bf1eaa85ad1aa05.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libserde-12d4a95e4eb2c629.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libserde-12d4a95e4eb2c629.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libserde_derive-502321eca877b28f.so
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libserde_json-2a6a9657b1189bf8.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libserde_json-2a6a9657b1189bf8.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libserde_spanned-1aa3f99ba50200cc.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libserde_spanned-1aa3f99ba50200cc.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libslab-167b61c8873b5898.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libslab-167b61c8873b5898.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libstrsim-9db86cfcff58645e.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libstrsim-9db86cfcff58645e.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libsyn-2e3a064a7fc2ef46.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libsyn-2e3a064a7fc2ef46.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libtoml-3e7ada6e5eb54b87.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libtoml-3e7ada6e5eb54b87.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libtoml_datetime-1e8c63529cd67bce.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libtoml_datetime-1e8c63529cd67bce.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libtoml_edit-c44867638b852d4f.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libtoml_edit-c44867638b852d4f.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libunicode_ident-8e941f04cb61c5a0.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libunicode_ident-8e941f04cb61c5a0.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libunicode_width-23769a1791f03f14.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libunicode_width-23769a1791f03f14.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libutf8parse-12769b3a5f1af50c.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libutf8parse-12769b3a5f1af50c.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libwalkdir-2ac8e2aa58550628.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libwalkdir-2ac8e2aa58550628.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libwinnow-5dc301566856e0ab.rlib
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ libwinnow-5dc301566856e0ab.rmeta
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ log-71eb742e7d074743.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ memchr-3381c97883e9e6cb.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ mio-d8e4c3bf5345ab4a.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ mio_extras-f40585c6e3cffe91.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ net2-e5debbf2235aabd4.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ notify-ccbd2c9fa44f14ee.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ number_prefix-3ebe005462406dc0.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ portable_atomic-a1cb6be183ff64ca.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ proc_macro2-42d5e56e18539f61.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ quote-cf1b0d624952025a.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ regex-6f2bede5d0b06e23.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ regex_syntax-5fb1cd753e21b1f1.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ rustlings-a082df77458a5a4a
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ rustlings-a082df77458a5a4a.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ ryu-62d671ac47bc7e87.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ same_file-9bf1eaa85ad1aa05.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ serde-12d4a95e4eb2c629.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ serde_derive-502321eca877b28f.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ serde_json-2a6a9657b1189bf8.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ serde_spanned-1aa3f99ba50200cc.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ slab-167b61c8873b5898.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ strsim-9db86cfcff58645e.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ syn-2e3a064a7fc2ef46.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ toml-3e7ada6e5eb54b87.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ toml_datetime-1e8c63529cd67bce.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ toml_edit-c44867638b852d4f.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ unicode_ident-8e941f04cb61c5a0.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ unicode_width-23769a1791f03f14.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ utf8parse-12769b3a5f1af50c.d
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ walkdir-2ac8e2aa58550628.d
β”‚Β Β      β”‚Β Β  └── winnow-5dc301566856e0ab.d
β”‚Β Β      β”œβ”€β”€ examples
β”‚Β Β      β”œβ”€β”€ incremental
β”‚Β Β      β”œβ”€β”€ rustlings
β”‚Β Β      └── rustlings.d
└── tests
    β”œβ”€β”€ fixture
    β”‚Β Β  β”œβ”€β”€ failure
    β”‚Β Β  β”‚Β Β  β”œβ”€β”€ compFailure.rs
    β”‚Β Β  β”‚Β Β  β”œβ”€β”€ compNoExercise.rs
    β”‚Β Β  β”‚Β Β  β”œβ”€β”€ info.toml
    β”‚Β Β  β”‚Β Β  β”œβ”€β”€ testFailure.rs
    β”‚Β Β  β”‚Β Β  └── testNotPassed.rs
    β”‚Β Β  β”œβ”€β”€ state
    β”‚Β Β  β”‚Β Β  β”œβ”€β”€ finished_exercise.rs
    β”‚Β Β  β”‚Β Β  β”œβ”€β”€ info.toml
    β”‚Β Β  β”‚Β Β  β”œβ”€β”€ pending_exercise.rs
    β”‚Β Β  β”‚Β Β  └── pending_test_exercise.rs
    β”‚Β Β  └── success
    β”‚Β Β      β”œβ”€β”€ compSuccess.rs
    β”‚Β Β      β”œβ”€β”€ info.toml
    β”‚Β Β      └── testSuccess.rs
    └── integration_tests.rs

64 directories, 398 files

Now you can run cd rustlings to be transported straight to the folder containing the exercises at ./exercises . These are ordered in the Readme following the Book on Rust, so let’s do the intro, follow the recommended route, and start learning Rust.

$ cat rustlings/exercises/README.md 
# Exercise to Book Chapter mapping

| Exercise               | Book Chapter        |
| ---------------------- | ------------------- |
| variables              | Β§3.1                |
| functions              | Β§3.3                |
| if                     | Β§3.5                |
| primitive_types        | Β§3.2, Β§4.3          |
| vecs                   | Β§8.1                |
| move_semantics         | Β§4.1-2              |
| structs                | Β§5.1, Β§5.3          |
| enums                  | Β§6, Β§18.3           |
| strings                | Β§8.2                |
| modules                | Β§7                  |
| hashmaps               | Β§8.3                |
| options                | Β§10.1               |
| error_handling         | Β§9                  |
| generics               | Β§10                 |
| traits                 | Β§10.2               |
| tests                  | Β§11.1               |
| lifetimes              | Β§10.3               |
| iterators              | Β§13.2-4             |
| threads                | Β§16.1-3             |
| smart_pointers         | Β§15, Β§16.3          |
| macros                 | Β§19.6               |
| clippy                 | Β§21.4               |
| conversions            | n/a                 |
$ cd rustlings/
alexlai@h2Jammy:~/rustlings$ rustlings 

       welcome to...
                 _   _ _
  _ __ _   _ ___| |_| (_)_ __   __ _ ___
 | '__| | | / __| __| | | '_ \ / _` / __|
 | |  | |_| \__ \ |_| | | | | | (_| \__ \
 |_|   \__,_|___/\__|_|_|_| |_|\__, |___/
                               |___/

Thanks for installing Rustlings!

Is this your first time? Don't worry, Rustlings was made for beginners! We are
going to teach you a lot of things about Rust, but before we can get
started, here's a couple of notes about how Rustlings operates:

1. The central concept behind Rustlings is that you solve exercises. These
   exercises usually have some sort of syntax error in them, which will cause
   them to fail compilation or testing. Sometimes there's a logic error instead
   of a syntax error. No matter what error, it's your job to find it and fix it!
   You'll know when you fixed it because then, the exercise will compile and
   Rustlings will be able to move on to the next exercise.
2. If you run Rustlings in watch mode (which we recommend), it'll automatically
   start with the first exercise. Don't get confused by an error message popping
   up as soon as you run Rustlings! This is part of the exercise that you're
   supposed to solve, so open the exercise file in an editor and start your
   detective work!
3. If you're stuck on an exercise, there is a helpful hint you can view by typing
   'hint' (in watch mode), or running `rustlings hint exercise_name`.
4. If an exercise doesn't make sense to you, feel free to open an issue on GitHub!
   (https://github.com/rust-lang/rustlings/issues/new). We look at every issue,
   and sometimes, other learners do too so you can help each other out!
5. If you want to use `rust-analyzer` with exercises, which provides features like
   autocompletion, run the command `rustlings lsp`.

Got all that? Great! To get started, run `rustlings watch` in order to get the first
exercise. Make sure to have your editor open!
Return to Top