From 13a3b6dd34238e90fd2d2dd3c1ffc0038df36572 Mon Sep 17 00:00:00 2001 From: palutz <> Date: Sun, 23 Jul 2023 17:49:24 +0100 Subject: [PATCH] structs, enums --- exercises/enums/enums1.rs | 7 ++++--- exercises/enums/enums2.rs | 6 ++++-- exercises/enums/enums3.rs | 12 ++++++++++-- exercises/structs/structs1.rs | 24 ++++++++++++++++++------ exercises/structs/structs2.rs | 21 +++++++++++++++++++-- exercises/structs/structs3.rs | 10 ++++------ 6 files changed, 59 insertions(+), 21 deletions(-) diff --git a/exercises/enums/enums1.rs b/exercises/enums/enums1.rs index 25525b25..de9b7d4d 100644 --- a/exercises/enums/enums1.rs +++ b/exercises/enums/enums1.rs @@ -2,11 +2,12 @@ // // No hints this time! ;) -// I AM NOT DONE - #[derive(Debug)] enum Message { - // TODO: define a few types of messages as used below + Quit, + Echo, + Move, + ChangeColor, } fn main() { diff --git a/exercises/enums/enums2.rs b/exercises/enums/enums2.rs index df93fe0f..87f0ce18 100644 --- a/exercises/enums/enums2.rs +++ b/exercises/enums/enums2.rs @@ -3,11 +3,13 @@ // Execute `rustlings hint enums2` or use the `hint` watch subcommand for a // hint. -// I AM NOT DONE - #[derive(Debug)] enum Message { // TODO: define the different variants used below + Move { x: i32, y : i32 }, + Echo(String), + ChangeColor(i32, i32, i32), + Quit, } impl Message { diff --git a/exercises/enums/enums3.rs b/exercises/enums/enums3.rs index 5d284417..b63e49e1 100644 --- a/exercises/enums/enums3.rs +++ b/exercises/enums/enums3.rs @@ -5,10 +5,12 @@ // Execute `rustlings hint enums3` or use the `hint` watch subcommand for a // hint. -// I AM NOT DONE - enum Message { // TODO: implement the message variant types based on their usage below + ChangeColor(u8, u8, u8), + Echo(String), + Move(Point), + Quit, } struct Point { @@ -43,6 +45,12 @@ impl State { // variants // Remember: When passing a tuple as a function argument, you'll need // extra parentheses: fn function((t, u, p, l, e)) + match message { + Message::ChangeColor(a, b, c) => self.change_color((a, b, c)), + Message::Echo(msg) => self.echo(msg), + Message::Move(p) => self.move_position(p), + Message::Quit => self.quit(), + } } } diff --git a/exercises/structs/structs1.rs b/exercises/structs/structs1.rs index 5fa5821c..56f3e507 100644 --- a/exercises/structs/structs1.rs +++ b/exercises/structs/structs1.rs @@ -5,17 +5,21 @@ // Execute `rustlings hint structs1` or use the `hint` watch subcommand for a // hint. -// I AM NOT DONE - struct ColorClassicStruct { // TODO: Something goes here + red : i32, + green : i32, + blue : i32, } -struct ColorTupleStruct(/* TODO: Something goes here */); +struct ColorTupleStruct(i32, i32, i32); #[derive(Debug)] struct UnitLikeStruct; +#[derive(Debug)] +struct JustStefano; + #[cfg(test)] mod tests { use super::*; @@ -23,7 +27,11 @@ mod tests { #[test] fn classic_c_structs() { // TODO: Instantiate a classic c struct! - // let green = + let green = ColorClassicStruct { + red : 0, + green : 255, + blue : 0, + }; assert_eq!(green.red, 0); assert_eq!(green.green, 255); @@ -33,7 +41,7 @@ mod tests { #[test] fn tuple_structs() { // TODO: Instantiate a tuple struct! - // let green = + let green = ColorTupleStruct (0, 255, 0); assert_eq!(green.0, 0); assert_eq!(green.1, 255); @@ -43,9 +51,13 @@ mod tests { #[test] fn unit_structs() { // TODO: Instantiate a unit-like struct! - // let unit_like_struct = + let st = JustStefano{}; + let unit_like_struct = UnitLikeStruct {}; let message = format!("{:?}s are fun!", unit_like_struct); + let msg2 = format!("{:?}, hello ", st); + assert_eq!(message, "UnitLikeStructs are fun!"); + assert_eq!(msg2, "JustStefano, hello "); } } diff --git a/exercises/structs/structs2.rs b/exercises/structs/structs2.rs index 328567f0..384bbd9c 100644 --- a/exercises/structs/structs2.rs +++ b/exercises/structs/structs2.rs @@ -5,7 +5,6 @@ // Execute `rustlings hint structs2` or use the `hint` watch subcommand for a // hint. -// I AM NOT DONE #[derive(Debug)] struct Order { @@ -30,6 +29,18 @@ fn create_order_template() -> Order { } } +fn create_my_order () -> Order { + Order { + name: "Hacker in Rust".to_string(), + year: 2019, + made_by_phone: false, + made_by_mobile: false, + made_by_email: true, + item_number: 123, + count: 1, + } +} + #[cfg(test)] mod tests { use super::*; @@ -38,7 +49,13 @@ mod tests { fn your_order() { let order_template = create_order_template(); // TODO: Create your own order using the update syntax and template above! - // let your_order = + // let your_order = create_my_order(); + // or better ... + let your_order = Order { + name: "Hacker in Rust".to_string(), + count : 1, + ..order_template + }; assert_eq!(your_order.name, "Hacker in Rust"); assert_eq!(your_order.year, order_template.year); assert_eq!(your_order.made_by_phone, order_template.made_by_phone); diff --git a/exercises/structs/structs3.rs b/exercises/structs/structs3.rs index 4851317c..266a32f0 100644 --- a/exercises/structs/structs3.rs +++ b/exercises/structs/structs3.rs @@ -7,8 +7,6 @@ // Execute `rustlings hint structs3` or use the `hint` watch subcommand for a // hint. -// I AM NOT DONE - #[derive(Debug)] struct Package { sender_country: String, @@ -29,12 +27,12 @@ impl Package { } } - fn is_international(&self) -> ??? { - // Something goes here... + fn is_international(&self) -> bool { + self.sender_country != self.recipient_country } - fn get_fees(&self, cents_per_gram: i32) -> ??? { - // Something goes here... + fn get_fees(&self, cents_per_gram: i32) -> i32 { + self.weight_in_grams * cents_per_gram } }