diff --git a/.all-contributorsrc b/.all-contributorsrc
index a8b82ae..37b8669 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -2208,6 +2208,33 @@
"contributions": [
"content"
]
+ },
+ {
+ "login": "novanish",
+ "name": "Anish",
+ "avatar_url": "https://avatars.githubusercontent.com/u/98446102?v=4",
+ "profile": "https://anishchhetri.com.np",
+ "contributions": [
+ "content"
+ ]
+ },
+ {
+ "login": "vnprc",
+ "name": "vnprc",
+ "avatar_url": "https://avatars.githubusercontent.com/u/9425366?v=4",
+ "profile": "https://github.com/vnprc",
+ "contributions": [
+ "content"
+ ]
+ },
+ {
+ "login": "jrcarl624",
+ "name": "Joshua Carlson",
+ "avatar_url": "https://avatars.githubusercontent.com/u/61999256?v=4",
+ "profile": "http://androecia.net",
+ "contributions": [
+ "content"
+ ]
}
],
"contributorsPerLine": 8,
diff --git a/AUTHORS.md b/AUTHORS.md
index ba20803..6c1ee1e 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -313,6 +313,9 @@ authors.
Robert Fry 🖋 |
tajo48 🖋 |
+ Anish 🖋 |
+ vnprc 🖋 |
+ Joshua Carlson 🖋 |
diff --git a/exercises/error_handling/errors1.rs b/exercises/error_handling/errors1.rs
index 0ba59a5..13d2724 100644
--- a/exercises/error_handling/errors1.rs
+++ b/exercises/error_handling/errors1.rs
@@ -3,7 +3,7 @@
// This function refuses to generate text to be printed on a nametag if you pass
// it an empty string. It'd be nicer if it explained what the problem was,
// instead of just sometimes returning `None`. Thankfully, Rust has a similar
-// construct to `Option` that can be used to express error conditions. Let's use
+// construct to `Result` that can be used to express error conditions. Let's use
// it!
//
// Execute `rustlings hint errors1` or use the `hint` watch subcommand for a
diff --git a/exercises/if/if3.rs b/exercises/if/if3.rs
new file mode 100644
index 0000000..73a7025
--- /dev/null
+++ b/exercises/if/if3.rs
@@ -0,0 +1,55 @@
+// if3.rs
+//
+// Execute `rustlings hint if3` or use the `hint` watch subcommand for a hint.
+
+// I AM NOT DONE
+
+pub fn animal_habitat(animal: &str) -> &'static str {
+ let identifier = if animal == "crab" {
+ 1
+ } else if animal == "gopher" {
+ 2.0
+ } else if animal == "snake" {
+ 3
+ } else {
+ "Unknown"
+ };
+
+ // DO NOT CHANGE THIS STATEMENT BELOW
+ let habitat = if identifier == 1 {
+ "Beach"
+ } else if identifier == 2 {
+ "Burrow"
+ } else if identifier == 3 {
+ "Desert"
+ } else {
+ "Unknown"
+ };
+
+ habitat
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn gopher_lives_in_burrow() {
+ assert_eq!(animal_habitat("gopher"), "Burrow")
+ }
+
+ #[test]
+ fn snake_lives_in_desert() {
+ assert_eq!(animal_habitat("snake"), "Desert")
+ }
+
+ #[test]
+ fn crab_lives_on_beach() {
+ assert_eq!(animal_habitat("crab"), "Beach")
+ }
+
+ #[test]
+ fn unknown_animal() {
+ assert_eq!(animal_habitat("dinosaur"), "Unknown")
+ }
+}
diff --git a/info.toml b/info.toml
index 9885cdc..584efee 100644
--- a/info.toml
+++ b/info.toml
@@ -167,6 +167,13 @@ For that first compiler error, it's important in Rust that each conditional
block returns the same type! To get the tests passing, you will need a couple
conditions checking different input values."""
+[[exercises]]
+name = "if3"
+path = "exercises/if/if3.rs"
+mode = "test"
+hint = """
+In Rust, every arm of an `if` expression has to return the same type of value. Make sure the type is consistent across all arms."""
+
# QUIZ 1
[[exercises]]
@@ -287,7 +294,7 @@ Also: Try accessing `vec0` after having called `fill_vec()`. See what happens!""
[[exercises]]
name = "move_semantics2"
path = "exercises/move_semantics/move_semantics2.rs"
-mode = "test"
+mode = "compile"
hint = """
When running this exercise for the first time, you'll notice an error about
"borrow of moved value". In Rust, when an argument is passed to a function and
diff --git a/oranda.json b/oranda.json
index 18ef8c6..603e474 100644
--- a/oranda.json
+++ b/oranda.json
@@ -1,10 +1,25 @@
{
- "homepage": "https://rustlings.cool",
- "repository": "https://github.com/rust-lang/rustlings",
- "analytics": {
- "plausible": {
- "domain": "rustlings.cool"
+ "project": {
+ "homepage": "https://rustlings.cool",
+ "repository": "https://github.com/rust-lang/rustlings"
+ },
+ "marketing": {
+ "analytics": {
+ "plausible": {
+ "domain": "rustlings.cool"
+ }
}
},
- "changelog": false
+ "components": {
+ "artifacts": {
+ "cargo_dist": false,
+ "package_managers": {
+ "preferred": {
+ "macos/linux/unix": "curl -L https://raw.githubusercontent.com/rust-lang/rustlings/main/install.sh | bash",
+ "windows": "Start-BitsTransfer -Source https://raw.githubusercontent.com/rust-lang/rustlings/main/install.ps1 -Destination $env:TMP/install_rustlings.ps1; Unblock-File $env:TMP/install_rustlings.ps1; Invoke-Expression $env:TMP/install_rustlings.ps1"
+ }
+ }
+ },
+ "changelog": true
+ }
}