summaryrefslogtreecommitdiff
path: root/rustlings/exercises/15_traits
diff options
context:
space:
mode:
Diffstat (limited to 'rustlings/exercises/15_traits')
-rw-r--r--rustlings/exercises/15_traits/README.md19
-rw-r--r--rustlings/exercises/15_traits/traits1.rs33
-rw-r--r--rustlings/exercises/15_traits/traits2.rs30
-rw-r--r--rustlings/exercises/15_traits/traits3.rs40
-rw-r--r--rustlings/exercises/15_traits/traits4.rs35
-rw-r--r--rustlings/exercises/15_traits/traits5.rs39
6 files changed, 0 insertions, 196 deletions
diff --git a/rustlings/exercises/15_traits/README.md b/rustlings/exercises/15_traits/README.md
deleted file mode 100644
index ac87c64..0000000
--- a/rustlings/exercises/15_traits/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Traits
-
-A trait is a collection of methods.
-
-Data types can implement traits. To do so, the methods making up the trait are defined for the data type. For example, the `String` data type implements the `From<&str>` trait. This allows a user to write `String::from("hello")`.
-
-In this way, traits are somewhat similar to Java interfaces and C++ abstract classes.
-
-Some additional common Rust traits include:
-
-- `Clone` (the `clone` method)
-- `Display` (which allows formatted display via `{}`)
-- `Debug` (which allows formatted display via `{:?}`)
-
-Because traits indicate shared behavior between data types, they are useful when writing generics.
-
-## Further information
-
-- [Traits](https://doc.rust-lang.org/book/ch10-02-traits.html)
diff --git a/rustlings/exercises/15_traits/traits1.rs b/rustlings/exercises/15_traits/traits1.rs
deleted file mode 100644
index fad6a50..0000000
--- a/rustlings/exercises/15_traits/traits1.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-// The trait `AppendBar` has only one function which appends "Bar" to any object
-// implementing this trait.
-trait AppendBar {
- fn append_bar(self) -> Self;
-}
-
-impl AppendBar for String {
- // TODO: Implement `AppendBar` for the type `String`.
- fn append_bar(self) -> Self {
- self + "Bar"
- }
-}
-
-fn main() {
- let s = String::from("Foo");
- let s = s.append_bar();
- println!("s: {s}");
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn is_foo_bar() {
- assert_eq!(String::from("Foo").append_bar(), "FooBar");
- }
-
- #[test]
- fn is_bar_bar() {
- assert_eq!(String::from("").append_bar().append_bar(), "BarBar");
- }
-}
diff --git a/rustlings/exercises/15_traits/traits2.rs b/rustlings/exercises/15_traits/traits2.rs
deleted file mode 100644
index 5dfc36d..0000000
--- a/rustlings/exercises/15_traits/traits2.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-trait AppendBar {
- fn append_bar(self) -> Self;
-}
-
-// TODO: Implement the trait `AppendBar` for a vector of strings.
-// `append_bar` should push the string "Bar" into the vector.
-
-impl AppendBar for Vec<String> {
- fn append_bar(self) -> Self {
- let mut s = self.clone();
- s.push(String::from("Bar"));
- s
- }
-}
-
-fn main() {
- // You can optionally experiment here.
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn is_vec_pop_eq_bar() {
- let mut foo = vec![String::from("Foo")].append_bar();
- assert_eq!(foo.pop().unwrap(), "Bar");
- assert_eq!(foo.pop().unwrap(), "Foo");
- }
-}
diff --git a/rustlings/exercises/15_traits/traits3.rs b/rustlings/exercises/15_traits/traits3.rs
deleted file mode 100644
index 144ac0a..0000000
--- a/rustlings/exercises/15_traits/traits3.rs
+++ /dev/null
@@ -1,40 +0,0 @@
-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 {
- String::from("Default license")
- }
-}
-
-struct SomeSoftware {
- version_number: i32,
-}
-
-struct OtherSoftware {
- version_number: String,
-}
-
-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.
-}
-
-#[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);
- }
-}
diff --git a/rustlings/exercises/15_traits/traits4.rs b/rustlings/exercises/15_traits/traits4.rs
deleted file mode 100644
index b23dcdd..0000000
--- a/rustlings/exercises/15_traits/traits4.rs
+++ /dev/null
@@ -1,35 +0,0 @@
-trait Licensed {
- fn licensing_info(&self) -> String {
- "Default license".to_string()
- }
-}
-
-struct SomeSoftware;
-struct OtherSoftware;
-
-impl Licensed for SomeSoftware {}
-impl Licensed for OtherSoftware {}
-
-// TODO: Fix the compiler error by only changing the signature of this function.
-fn compare_license_types(software1: impl Licensed, software2: impl Licensed) -> bool {
- software1.licensing_info() == software2.licensing_info()
-}
-
-fn main() {
- // You can optionally experiment here.
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn compare_license_information() {
- assert!(compare_license_types(SomeSoftware, OtherSoftware));
- }
-
- #[test]
- fn compare_license_information_backwards() {
- assert!(compare_license_types(OtherSoftware, SomeSoftware));
- }
-}
diff --git a/rustlings/exercises/15_traits/traits5.rs b/rustlings/exercises/15_traits/traits5.rs
deleted file mode 100644
index 6548014..0000000
--- a/rustlings/exercises/15_traits/traits5.rs
+++ /dev/null
@@ -1,39 +0,0 @@
-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 {}
-
-// TODO: Fix the compiler error by only changing the signature of this function.
-fn some_func<T : SomeTrait + OtherTrait>(item: T) -> 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));
- }
-}