summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--exercises/15_traits/traits3.rs15
-rw-r--r--rustlings-macros/info.toml9
-rw-r--r--solutions/15_traits/traits3.rs37
3 files changed, 48 insertions, 13 deletions
diff --git a/exercises/15_traits/traits3.rs b/exercises/15_traits/traits3.rs
index 66da235..c244650 100644
--- a/exercises/15_traits/traits3.rs
+++ b/exercises/15_traits/traits3.rs
@@ -1,9 +1,8 @@
-// Your task is to implement the Licensed trait for both structures and have
-// them return the same information without writing the same function twice.
-//
-// Consider what you can add to the Licensed trait.
-
trait Licensed {
+ // TODO: Add a default implementation for `licensing_info` so that
+ // implementors like the two structs below can share that default behavior
+ // without repeating the function.
+ // The default license information should be the string "Default license".
fn licensing_info(&self) -> String;
}
@@ -15,8 +14,8 @@ struct OtherSoftware {
version_number: String,
}
-impl Licensed for SomeSoftware {} // Don't edit this line
-impl Licensed for OtherSoftware {} // Don't edit this line
+impl Licensed for SomeSoftware {} // Don't edit this line.
+impl Licensed for OtherSoftware {} // Don't edit this line.
fn main() {
// You can optionally experiment here.
@@ -28,7 +27,7 @@ mod tests {
#[test]
fn is_licensing_info_the_same() {
- let licensing_info = String::from("Some information");
+ let licensing_info = "Default license";
let some_software = SomeSoftware { version_number: 1 };
let other_software = OtherSoftware {
version_number: "v2.0.0".to_string(),
diff --git a/rustlings-macros/info.toml b/rustlings-macros/info.toml
index f5dd82a..92e440a 100644
--- a/rustlings-macros/info.toml
+++ b/rustlings-macros/info.toml
@@ -772,11 +772,12 @@ the value is owned anyway."""
name = "traits3"
dir = "15_traits"
hint = """
-Traits can have a default implementation for functions. Structs that implement
-the trait can then use the default version of these functions if they choose not
-to implement the function themselves.
+Traits can have a default implementation for functions. Data types that
+implement the trait can then use the default version of these functions
+if they choose not to implement the function themselves.
-See the documentation at: https://doc.rust-lang.org/book/ch10-02-traits.html#default-implementations"""
+Related section in The Book:
+https://doc.rust-lang.org/book/ch10-02-traits.html#default-implementations"""
[[exercises]]
name = "traits4"
diff --git a/solutions/15_traits/traits3.rs b/solutions/15_traits/traits3.rs
index 4e18198..3d8ec85 100644
--- a/solutions/15_traits/traits3.rs
+++ b/solutions/15_traits/traits3.rs
@@ -1 +1,36 @@
-// Solutions will be available before the stable release. Thank you for testing the beta version 🥰
+trait Licensed {
+ fn licensing_info(&self) -> String {
+ "Default license".to_string()
+ }
+}
+
+struct SomeSoftware {
+ version_number: i32,
+}
+
+struct OtherSoftware {
+ version_number: String,
+}
+
+impl Licensed for SomeSoftware {}
+impl Licensed for OtherSoftware {}
+
+fn main() {
+ // You can optionally experiment here.
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn is_licensing_info_the_same() {
+ let licensing_info = "Default license";
+ let some_software = SomeSoftware { version_number: 1 };
+ let other_software = OtherSoftware {
+ version_number: "v2.0.0".to_string(),
+ };
+ assert_eq!(some_software.licensing_info(), licensing_info);
+ assert_eq!(other_software.licensing_info(), licensing_info);
+ }
+}