From c5a563d1d342d5f6bd88dacf9fec9ff22a4f59f7 Mon Sep 17 00:00:00 2001 From: lukaszKielar <kielar.lukasz@hotmail.com> Date: Sun, 21 Jun 2020 20:58:40 +0200 Subject: [PATCH] finish structs exercises --- exercises/structs/structs1.rs | 18 ++++++++++-------- exercises/structs/structs2.rs | 8 +++++--- exercises/structs/structs3.rs | 26 +++++++++++++------------- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/exercises/structs/structs1.rs b/exercises/structs/structs1.rs index 6d0b2f4..aa6422a 100644 --- a/exercises/structs/structs1.rs +++ b/exercises/structs/structs1.rs @@ -1,13 +1,12 @@ // structs1.rs // Address all the TODOs to make the tests pass! -// I AM NOT DONE - -struct ColorClassicStruct { - // TODO: Something goes here +struct ColorClassicStruct<'a> { + name: &'a str, + hex: &'a str, } -struct ColorTupleStruct(/* TODO: Something goes here */); +struct ColorTupleStruct<'a>(&'a str, &'a str); #[derive(Debug)] struct UnitStruct; @@ -19,7 +18,10 @@ mod tests { #[test] fn classic_c_structs() { // TODO: Instantiate a classic c struct! - // let green = + let green = ColorClassicStruct { + name: "green", + hex: "#00FF00", + }; assert_eq!(green.name, "green"); assert_eq!(green.hex, "#00FF00"); @@ -28,7 +30,7 @@ mod tests { #[test] fn tuple_structs() { // TODO: Instantiate a tuple struct! - // let green = + let green = ColorTupleStruct("green", "#00FF00"); assert_eq!(green.0, "green"); assert_eq!(green.1, "#00FF00"); @@ -37,7 +39,7 @@ mod tests { #[test] fn unit_structs() { // TODO: Instantiate a unit struct! - // let unit_struct = + let unit_struct = UnitStruct; let message = format!("{:?}s are fun!", unit_struct); assert_eq!(message, "UnitStructs are fun!"); diff --git a/exercises/structs/structs2.rs b/exercises/structs/structs2.rs index f9c6427..38960f6 100644 --- a/exercises/structs/structs2.rs +++ b/exercises/structs/structs2.rs @@ -1,8 +1,6 @@ // structs2.rs // Address all the TODOs to make the tests pass! -// I AM NOT DONE - #[derive(Debug)] struct Order { name: String, @@ -34,7 +32,11 @@ 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 = 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 77cc154..eb7e084 100644 --- a/exercises/structs/structs3.rs +++ b/exercises/structs/structs3.rs @@ -3,30 +3,33 @@ // exercise we have defined the Package struct and we want to test some logic attached to it, // make the code compile and the tests pass! If you have issues execute `rustlings hint structs3` -// I AM NOT DONE - #[derive(Debug)] struct Package { from: String, to: String, - weight: f32 + weight: f32, } impl Package { fn new(from: String, to: String, weight: f32) -> Package { if weight <= 0.0 { - // Something goes here... + let msg = format!("Weight must be greater than 0, {} specified", weight); + panic!(msg) } else { - return Package {from, to, weight}; + return Package { from, to, weight }; } } - fn is_international(&self) -> ??? { - // Something goes here... + fn is_international(&self) -> bool { + if self.from == self.to { + false + } else { + true + } } - fn get_fees(&self, cost_per_kg: f32) -> ??? { - // Something goes here... + fn get_fees(&self, cost_per_kg: f32) -> f32 { + self.weight * cost_per_kg } } @@ -47,7 +50,6 @@ mod tests { fn create_international_package() { let country_from = String::from("Spain"); let country_to = String::from("Russia"); - let package = Package::new(country_from, country_to, 1.2); assert!(package.is_international()); @@ -58,10 +60,8 @@ mod tests { let country_from = String::from("Spain"); let country_to = String::from("Spain"); - let country_fee = ???; - + let country_fee = 8.; let package = Package::new(country_from, country_to, 22.0); - assert_eq!(package.get_fees(country_fee), 176.0); } }