summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--exercises/07_structs/structs1.rs25
-rw-r--r--rustlings-macros/info.toml9
-rw-r--r--solutions/07_structs/structs1.rs50
3 files changed, 65 insertions, 19 deletions
diff --git a/exercises/07_structs/structs1.rs b/exercises/07_structs/structs1.rs
index 62f1421..959c4c6 100644
--- a/exercises/07_structs/structs1.rs
+++ b/exercises/07_structs/structs1.rs
@@ -1,13 +1,12 @@
-// Address all the TODOs to make the tests pass!
-
-struct ColorClassicStruct {
- // TODO: Something goes here
+struct ColorRegularStruct {
+ // TODO: Add the fields that the test `regular_structs` expects.
+ // What types should the fields have? What are the minimum and maximum values for RGB colors?
}
-struct ColorTupleStruct(/* TODO: Something goes here */);
+struct ColorTupleStruct(/* TODO: Add the fields that the test `tuple_structs` expects */);
#[derive(Debug)]
-struct UnitLikeStruct;
+struct UnitStruct;
fn main() {
// You can optionally experiment here.
@@ -18,8 +17,8 @@ mod tests {
use super::*;
#[test]
- fn classic_c_structs() {
- // TODO: Instantiate a classic c struct!
+ fn regular_structs() {
+ // TODO: Instantiate a regular struct.
// let green =
assert_eq!(green.red, 0);
@@ -29,7 +28,7 @@ mod tests {
#[test]
fn tuple_structs() {
- // TODO: Instantiate a tuple struct!
+ // TODO: Instantiate a tuple struct.
// let green =
assert_eq!(green.0, 0);
@@ -39,10 +38,10 @@ mod tests {
#[test]
fn unit_structs() {
- // TODO: Instantiate a unit-like struct!
- // let unit_like_struct =
- let message = format!("{:?}s are fun!", unit_like_struct);
+ // TODO: Instantiate a unit struct.
+ // let unit_struct =
+ let message = format!("{unit_struct:?}s are fun!");
- assert_eq!(message, "UnitLikeStructs are fun!");
+ assert_eq!(message, "UnitStructs are fun!");
}
}
diff --git a/rustlings-macros/info.toml b/rustlings-macros/info.toml
index d6236c5..81b9895 100644
--- a/rustlings-macros/info.toml
+++ b/rustlings-macros/info.toml
@@ -402,15 +402,14 @@ hint = """
Rust has more than one type of struct. Three actually, all variants are used to
package related data together.
-There are normal (or classic) structs. These are named collections of related
-data stored in fields.
+There are regular structs. These are named collections of related data stored in
+fields.
Tuple structs are basically just named tuples.
-Finally, Unit-like structs. These don't have any fields and are useful for
-generics.
+Finally, unit structs. These don't have any fields and are useful for generics.
-In this exercise you need to complete and implement one of each kind.
+In this exercise, you need to complete and implement one of each kind.
Read more about structs in The Book:
https://doc.rust-lang.org/book/ch05-01-defining-structs.html"""
diff --git a/solutions/07_structs/structs1.rs b/solutions/07_structs/structs1.rs
index 4e18198..98fafcc 100644
--- a/solutions/07_structs/structs1.rs
+++ b/solutions/07_structs/structs1.rs
@@ -1 +1,49 @@
-// Solutions will be available before the stable release. Thank you for testing the beta version 🥰
+struct ColorRegularStruct {
+ red: u8,
+ green: u8,
+ blue: u8,
+}
+
+struct ColorTupleStruct(u8, u8, u8);
+
+#[derive(Debug)]
+struct UnitStruct;
+
+fn main() {
+ // You can optionally experiment here.
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn regular_structs() {
+ let green = ColorRegularStruct {
+ red: 0,
+ green: 255,
+ blue: 0,
+ };
+
+ assert_eq!(green.red, 0);
+ assert_eq!(green.green, 255);
+ assert_eq!(green.blue, 0);
+ }
+
+ #[test]
+ fn tuple_structs() {
+ let green = ColorTupleStruct(0, 255, 0);
+
+ assert_eq!(green.0, 0);
+ assert_eq!(green.1, 255);
+ assert_eq!(green.2, 0);
+ }
+
+ #[test]
+ fn unit_structs() {
+ let unit_struct = UnitStruct;
+ let message = format!("{unit_struct:?}s are fun!");
+
+ assert_eq!(message, "UnitStructs are fun!");
+ }
+}