summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--exercises/15_traits/traits5.rs28
-rw-r--r--rustlings-macros/info.toml6
-rw-r--r--solutions/15_traits/traits5.rs40
3 files changed, 59 insertions, 15 deletions
diff --git a/exercises/15_traits/traits5.rs b/exercises/15_traits/traits5.rs
index 3e62283..5b356ac 100644
--- a/exercises/15_traits/traits5.rs
+++ b/exercises/15_traits/traits5.rs
@@ -1,7 +1,3 @@
-// Your task is to replace the '??' sections so the code compiles.
-//
-// Don't change any line other than the marked one.
-
trait SomeTrait {
fn some_function(&self) -> bool {
true
@@ -14,20 +10,30 @@ trait OtherTrait {
}
}
-struct SomeStruct {}
-struct OtherStruct {}
-
+struct SomeStruct;
impl SomeTrait for SomeStruct {}
impl OtherTrait for SomeStruct {}
+
+struct OtherStruct;
impl SomeTrait for OtherStruct {}
impl OtherTrait for OtherStruct {}
-// YOU MAY ONLY CHANGE THE NEXT LINE
-fn some_func(item: ??) -> bool {
+// TODO: Fix the compiler error by only changing the signature of this function.
+fn some_func(item: ???) -> bool {
item.some_function() && item.other_function()
}
fn main() {
- some_func(SomeStruct {});
- some_func(OtherStruct {});
+ // You can optionally experiment here.
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_some_func() {
+ assert!(some_func(SomeStruct));
+ assert!(some_func(OtherStruct));
+ }
}
diff --git a/rustlings-macros/info.toml b/rustlings-macros/info.toml
index 43ccdf8..92c878f 100644
--- a/rustlings-macros/info.toml
+++ b/rustlings-macros/info.toml
@@ -792,12 +792,12 @@ https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters"""
[[exercises]]
name = "traits5"
dir = "15_traits"
-test = false
hint = """
To ensure a parameter implements multiple traits use the '+ syntax'. Try
-replacing the '??' with 'impl [what goes here?] + [what goes here?]'.
+replacing `???` with 'impl [what goes here?] + [what goes here?]'.
-See the documentation at: https://doc.rust-lang.org/book/ch10-02-traits.html#specifying-multiple-trait-bounds-with-the--syntax"""
+Related section in The Book:
+https://doc.rust-lang.org/book/ch10-02-traits.html#specifying-multiple-trait-bounds-with-the--syntax"""
# QUIZ 3
diff --git a/solutions/15_traits/traits5.rs b/solutions/15_traits/traits5.rs
index 4e18198..1fb426a 100644
--- a/solutions/15_traits/traits5.rs
+++ b/solutions/15_traits/traits5.rs
@@ -1 +1,39 @@
-// Solutions will be available before the stable release. Thank you for testing the beta version 🥰
+trait SomeTrait {
+ fn some_function(&self) -> bool {
+ true
+ }
+}
+
+trait OtherTrait {
+ fn other_function(&self) -> bool {
+ true
+ }
+}
+
+struct SomeStruct;
+impl SomeTrait for SomeStruct {}
+impl OtherTrait for SomeStruct {}
+
+struct OtherStruct;
+impl SomeTrait for OtherStruct {}
+impl OtherTrait for OtherStruct {}
+
+fn some_func(item: impl SomeTrait + OtherTrait) -> bool {
+ // ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ item.some_function() && item.other_function()
+}
+
+fn main() {
+ // You can optionally experiment here.
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_some_func() {
+ assert!(some_func(SomeStruct));
+ assert!(some_func(OtherStruct));
+ }
+}