diff --git a/.all-contributorsrc b/.all-contributorsrc
index 8207a035..24832b42 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -1,6 +1,6 @@
{
"files": [
- "README.md"
+ "AUTHORS.md"
],
"imageSize": 100,
"commit": false,
@@ -1092,6 +1092,33 @@
"contributions": [
"doc"
]
+ },
+ {
+ "login": "x-hgg-x",
+ "name": "x-hgg-x",
+ "avatar_url": "https://avatars.githubusercontent.com/u/39058530?v=4",
+ "profile": "https://github.com/x-hgg-x",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "KisaragiEffective",
+ "name": "Kisaragi",
+ "avatar_url": "https://avatars.githubusercontent.com/u/48310258?v=4",
+ "profile": "http://kisaragieffective.github.io",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "Kallu-A",
+ "name": "Lucas Aries",
+ "avatar_url": "https://avatars.githubusercontent.com/u/73198738?v=4",
+ "profile": "https://github.com/Kallu-A",
+ "contributions": [
+ "content"
+ ]
}
],
"contributorsPerLine": 8,
diff --git a/AUTHORS.md b/AUTHORS.md
new file mode 100644
index 00000000..a7f29bb2
--- /dev/null
+++ b/AUTHORS.md
@@ -0,0 +1,172 @@
+## Authors
+
+This file lists the people that have contributed to this project.
+
+Excluded from this list are @carols10cents and @diannasoreil, the principal
+authors.
+
+
+
+
+
+
+
+
+
+
+
+This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
diff --git a/Cargo.toml b/Cargo.toml
index 30032695..4761c9a4 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -11,7 +11,7 @@ console = "0.7.7"
notify = "4.0.15"
toml = "0.4.10"
regex = "1.1.6"
-serde = {version = "1.0.10", features = ["derive"]}
+serde = { version = "1.0.10", features = ["derive"] }
[[bin]]
name = "rustlings"
@@ -21,3 +21,6 @@ path = "src/main.rs"
assert_cmd = "0.11.0"
predicates = "1.0.1"
glob = "0.3.0"
+
+[features]
+exercises = []
diff --git a/README.md b/README.md
index c9bb8b87..babc3423 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,3 @@
-
-[](#contributors-)
-
-
# rustlings π¦β€οΈ
Greetings and welcome to `rustlings`. This project contains small exercises to get you used to reading and writing Rust code. This includes reading and responding to compiler messages!
@@ -36,13 +32,13 @@ This will install Rustlings and give you access to the `rustlings` command. Run
In PowerShell (Run as Administrator), set `ExecutionPolicy` to `RemoteSigned`:
-```ps
+```ps1
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
```
Then, you can run:
-```ps
+```ps1
Start-BitsTransfer -Source https://git.io/JTL5v -Destination $env:TMP/install_rustlings.ps1; Unblock-File $env:TMP/install_rustlings.ps1; Invoke-Expression $env:TMP/install_rustlings.ps1
```
@@ -68,6 +64,7 @@ cargo install --force --path .
```
If there are installation errors, ensure that your toolchain is up to date. For the latest, run:
+
```bash
rustup update
```
@@ -107,17 +104,18 @@ rustlings run next
In case you get stuck, you can run the following command to get a hint for your
exercise:
-``` bash
+```bash
rustlings hint myExercise1
```
You can also get the hint for the next unsolved exercise with the following command:
-``` bash
+```bash
rustlings hint next
```
To check your progress, you can run the following command:
+
```bash
rustlings list
```
@@ -135,14 +133,14 @@ Once you've completed Rustlings, put your new knowledge to good use! Continue pr
If you want to remove Rustlings from your system, there's two steps. First, you'll need to remove the exercises folder that the install script created
for you:
-``` bash
+```bash
rm -rf rustlings # or your custom folder name, if you chose and or renamed it
```
Second, since Rustlings got installed via `cargo install`, it's only reasonable to assume that you can also remove it using Cargo, and
exactly that is the case. Run `cargo uninstall` to remove the `rustlings` binary:
-``` bash
+```bash
cargo uninstall rustlings
```
@@ -172,165 +170,4 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md).
## Contributors β¨
-Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
-
-
-
-
-
-
-
-
-
-
-
-This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
+Thanks goes to the wonderful people listed in [AUTHORS.md](./AUTHORS.md) π
diff --git a/exercises/advanced_errors/mod.rs b/exercises/advanced_errors/mod.rs
new file mode 100644
index 00000000..e33fb80d
--- /dev/null
+++ b/exercises/advanced_errors/mod.rs
@@ -0,0 +1,2 @@
+mod advanced_errs1;
+mod advanced_errs2;
diff --git a/exercises/clippy/mod.rs b/exercises/clippy/mod.rs
new file mode 100644
index 00000000..689dc95f
--- /dev/null
+++ b/exercises/clippy/mod.rs
@@ -0,0 +1,2 @@
+mod clippy1;
+mod clippy2;
diff --git a/exercises/collections/mod.rs b/exercises/collections/mod.rs
new file mode 100644
index 00000000..f46c1424
--- /dev/null
+++ b/exercises/collections/mod.rs
@@ -0,0 +1,4 @@
+mod hashmap1;
+mod hashmap2;
+mod vec1;
+mod vec2;
diff --git a/exercises/conversions/mod.rs b/exercises/conversions/mod.rs
new file mode 100644
index 00000000..69f66ae4
--- /dev/null
+++ b/exercises/conversions/mod.rs
@@ -0,0 +1,5 @@
+mod as_ref_mut;
+mod from_into;
+mod from_str;
+mod try_from_into;
+mod using_as;
diff --git a/exercises/enums/mod.rs b/exercises/enums/mod.rs
new file mode 100644
index 00000000..a23fd6e5
--- /dev/null
+++ b/exercises/enums/mod.rs
@@ -0,0 +1,3 @@
+mod enums1;
+mod enums2;
+mod enums3;
diff --git a/exercises/error_handling/mod.rs b/exercises/error_handling/mod.rs
new file mode 100644
index 00000000..539fa23d
--- /dev/null
+++ b/exercises/error_handling/mod.rs
@@ -0,0 +1,6 @@
+mod errors1;
+mod errors2;
+mod errors3;
+mod errors4;
+mod errors5;
+mod errors6;
diff --git a/exercises/functions/mod.rs b/exercises/functions/mod.rs
new file mode 100644
index 00000000..445b6f58
--- /dev/null
+++ b/exercises/functions/mod.rs
@@ -0,0 +1,5 @@
+mod functions1;
+mod functions2;
+mod functions3;
+mod functions4;
+mod functions5;
diff --git a/exercises/generics/mod.rs b/exercises/generics/mod.rs
new file mode 100644
index 00000000..5b93555c
--- /dev/null
+++ b/exercises/generics/mod.rs
@@ -0,0 +1,3 @@
+mod generics1;
+mod generics2;
+mod generics3;
diff --git a/exercises/if/mod.rs b/exercises/if/mod.rs
new file mode 100644
index 00000000..c5d02445
--- /dev/null
+++ b/exercises/if/mod.rs
@@ -0,0 +1,2 @@
+mod if1;
+mod if2;
diff --git a/exercises/intro/mod.rs b/exercises/intro/mod.rs
new file mode 100644
index 00000000..445c47ab
--- /dev/null
+++ b/exercises/intro/mod.rs
@@ -0,0 +1,2 @@
+mod intro1;
+mod intro2;
diff --git a/exercises/macros/mod.rs b/exercises/macros/mod.rs
new file mode 100644
index 00000000..9f65acf5
--- /dev/null
+++ b/exercises/macros/mod.rs
@@ -0,0 +1,4 @@
+mod macros1;
+mod macros2;
+mod macros3;
+mod macros4;
diff --git a/exercises/mod.rs b/exercises/mod.rs
new file mode 100644
index 00000000..6a143b56
--- /dev/null
+++ b/exercises/mod.rs
@@ -0,0 +1,26 @@
+mod advanced_errors;
+mod clippy;
+mod collections;
+mod conversions;
+mod enums;
+mod error_handling;
+mod functions;
+mod generics;
+mod r#if;
+mod intro;
+mod macros;
+mod modules;
+mod move_semantics;
+mod option;
+mod primitive_types;
+mod quiz1;
+mod quiz2;
+mod quiz3;
+mod quiz4;
+mod standard_library_types;
+mod strings;
+mod structs;
+mod tests;
+mod threads;
+mod traits;
+mod variables;
diff --git a/exercises/modules/mod.rs b/exercises/modules/mod.rs
new file mode 100644
index 00000000..35f96af5
--- /dev/null
+++ b/exercises/modules/mod.rs
@@ -0,0 +1,3 @@
+mod modules1;
+mod modules2;
+mod modules3;
diff --git a/exercises/move_semantics/mod.rs b/exercises/move_semantics/mod.rs
new file mode 100644
index 00000000..c9e61b36
--- /dev/null
+++ b/exercises/move_semantics/mod.rs
@@ -0,0 +1,5 @@
+mod move_semantics1;
+mod move_semantics2;
+mod move_semantics3;
+mod move_semantics4;
+mod move_semantics5;
diff --git a/exercises/move_semantics/move_semantics6.rs b/exercises/move_semantics/move_semantics6.rs
new file mode 100644
index 00000000..457e7ae7
--- /dev/null
+++ b/exercises/move_semantics/move_semantics6.rs
@@ -0,0 +1,25 @@
+// move_semantics6.rs
+// Make me compile! `rustlings hint move_semantics6` for hints
+// You can't change anything except adding or removing references
+
+// I AM NOT DONE
+
+fn main() {
+ let data = "Rust is great!".to_string();
+
+ get_char(data);
+
+ string_uppercase(&data);
+}
+
+// Should not take ownership
+fn get_char(data: String) -> char {
+ data.chars().last().unwrap()
+}
+
+// Should take ownership
+fn string_uppercase(mut data: &String) {
+ data = &data.to_uppercase();
+
+ println!("{}", data);
+}
diff --git a/exercises/option/mod.rs b/exercises/option/mod.rs
new file mode 100644
index 00000000..b3cdb13d
--- /dev/null
+++ b/exercises/option/mod.rs
@@ -0,0 +1,3 @@
+mod option1;
+mod option2;
+mod option3;
diff --git a/exercises/primitive_types/mod.rs b/exercises/primitive_types/mod.rs
new file mode 100644
index 00000000..23355239
--- /dev/null
+++ b/exercises/primitive_types/mod.rs
@@ -0,0 +1,6 @@
+mod primitive_types1;
+mod primitive_types2;
+mod primitive_types3;
+mod primitive_types4;
+mod primitive_types5;
+mod primitive_types6;
diff --git a/exercises/standard_library_types/mod.rs b/exercises/standard_library_types/mod.rs
new file mode 100644
index 00000000..b03acb92
--- /dev/null
+++ b/exercises/standard_library_types/mod.rs
@@ -0,0 +1,7 @@
+mod arc1;
+mod box1;
+mod iterators1;
+mod iterators2;
+mod iterators3;
+mod iterators4;
+mod iterators5;
diff --git a/exercises/strings/mod.rs b/exercises/strings/mod.rs
new file mode 100644
index 00000000..b1b460bc
--- /dev/null
+++ b/exercises/strings/mod.rs
@@ -0,0 +1,2 @@
+mod strings1;
+mod strings2;
diff --git a/exercises/structs/mod.rs b/exercises/structs/mod.rs
new file mode 100644
index 00000000..214fed16
--- /dev/null
+++ b/exercises/structs/mod.rs
@@ -0,0 +1,3 @@
+mod structs1;
+mod structs2;
+mod structs3;
diff --git a/exercises/tests/mod.rs b/exercises/tests/mod.rs
new file mode 100644
index 00000000..489541be
--- /dev/null
+++ b/exercises/tests/mod.rs
@@ -0,0 +1,3 @@
+mod tests1;
+mod tests2;
+mod tests3;
diff --git a/exercises/threads/mod.rs b/exercises/threads/mod.rs
new file mode 100644
index 00000000..24d54007
--- /dev/null
+++ b/exercises/threads/mod.rs
@@ -0,0 +1 @@
+mod threads1;
diff --git a/exercises/traits/mod.rs b/exercises/traits/mod.rs
new file mode 100644
index 00000000..6f0a9c3f
--- /dev/null
+++ b/exercises/traits/mod.rs
@@ -0,0 +1,2 @@
+mod traits1;
+mod traits2;
diff --git a/exercises/variables/mod.rs b/exercises/variables/mod.rs
new file mode 100644
index 00000000..a25f477e
--- /dev/null
+++ b/exercises/variables/mod.rs
@@ -0,0 +1,6 @@
+mod variables1;
+mod variables2;
+mod variables3;
+mod variables4;
+mod variables5;
+mod variables6;
diff --git a/info.toml b/info.toml
index ced06b02..1c5fcc83 100644
--- a/info.toml
+++ b/info.toml
@@ -237,6 +237,21 @@ in the book's section References and Borrowing':
https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#mutable-references.
"""
+[[exercises]]
+name = "move_semantics6"
+path = "exercises/move_semantics/move_semantics6.rs"
+mode = "compile"
+hint = """
+To find the answer, you can consult the book section "References and Borrowing":
+https://doc.rust-lang.org/stable/book/ch04-02-references-and-borrowing.html
+The first problem is that `get_char` is taking ownership of the string.
+So `data` is moved and can't be used for `string_uppercase`
+`data` is moved to `get_char` first, meaning that `string_uppercase` cannot manipulate the data.
+Once you've fixed that, `string_uppercase`'s function signature will also need to be adjusted.
+Can you figure out how?
+
+Another hint: it has to do with the `&` character."""
+
# PRIMITIVE TYPES
[[exercises]]
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 00000000..82c1e7e4
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,3 @@
+#[cfg(feature = "exercises")]
+#[path = "../exercises/mod.rs"]
+mod exercises;