-
+
+
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
diff --git a/buildkite.yml b/buildkite.yml
deleted file mode 100644
index 91a0753c..00000000
--- a/buildkite.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-steps:
- - label: "Test with stable"
- command: rustup run stable cargo test
- - label: "Test with beta"
- command: rustup run beta cargo test
diff --git a/default_out.txt b/default_out.txt
index 05267591..b90d1e3a 100644
--- a/default_out.txt
+++ b/default_out.txt
@@ -1,19 +1,25 @@
Thanks for installing Rustlings!
-Is this your first time?
+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:
-Let's make sure you're up to speed:
-- You have Rust installed, preferably via `rustup`
-- You have `~/.cargo/bin` added to your PATH variable
-- You have cloned this repository (https://github.com/rust-lang/rustlings)
-- You have installed Rust language support for your editor
-- You have locally installed the `rustlings` command by running an
- installation script or manually executing:
+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 myexercise`.
+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!
-cargo install --force --path .
-
-If you've done all of this (or even most of it), congrats! You're ready
-to start working with Rust.
-
-To get started, run `rustlings watch` in order to get the first exercise.
-Make sure to have your editor open!
+Got all that? Great! To get started, run `rustlings watch` in order to get the first
+exercise. Make sure to have your editor open!
diff --git a/exercises/README.md b/exercises/README.md
new file mode 100644
index 00000000..73754db5
--- /dev/null
+++ b/exercises/README.md
@@ -0,0 +1,24 @@
+# Exercise to Book Chapter mapping
+
+| Exercise | Book Chapter |
+|------------------------|--------------|
+| variables | Β§3.1 |
+| functions | Β§3.3 |
+| if | Β§3.5 |
+| move_semantics | Β§4.1 |
+| primitive_types | Β§4.3 |
+| structs | Β§5.1 |
+| enums | Β§6 |
+| modules | Β§7 |
+| collections | Β§8.1, Β§8.3 |
+| strings | Β§8.2 |
+| error_handling | Β§9 |
+| generics | Β§10 |
+| option | Β§10.1 |
+| traits | Β§10.2 |
+| tests | Β§11.1 |
+| standard_library_types | Β§13.2 |
+| threads | Β§16.1 |
+| macros | Β§19.6 |
+| clippy | n/a |
+| conversions | n/a |
diff --git a/exercises/advanced_errors/advanced_errs1.rs b/exercises/advanced_errors/advanced_errs1.rs
new file mode 100644
index 00000000..4bc7b635
--- /dev/null
+++ b/exercises/advanced_errors/advanced_errs1.rs
@@ -0,0 +1,98 @@
+// advanced_errs1.rs
+
+// Remember back in errors6, we had multiple mapping functions so that we
+// could translate lower-level errors into our custom error type using
+// `map_err()`? What if we could use the `?` operator directly instead?
+
+// Make this code compile! Execute `rustlings hint advanced_errs1` for
+// hints :)
+
+// I AM NOT DONE
+
+use std::num::ParseIntError;
+use std::str::FromStr;
+
+// This is a custom error type that we will be using in the `FromStr`
+// implementation.
+#[derive(PartialEq, Debug)]
+enum ParsePosNonzeroError {
+ Creation(CreationError),
+ ParseInt(ParseIntError),
+}
+
+impl From