diff --git a/exercises/structs/structs3.rs b/exercises/structs/structs3.rs index eb7e084..c931386 100644 --- a/exercises/structs/structs3.rs +++ b/exercises/structs/structs3.rs @@ -5,31 +5,39 @@ #[derive(Debug)] struct Package { - from: String, - to: String, - weight: f32, + sender_country: String, + recipient_country: String, + weight_in_grams: i32, } impl Package { - fn new(from: String, to: String, weight: f32) -> Package { - if weight <= 0.0 { - let msg = format!("Weight must be greater than 0, {} specified", weight); + fn new(sender_country: String, recipient_country: String, weight_in_grams: i32) -> Package { + if weight_in_grams <= 0 { + let msg = format!( + "Weight must be greater than 0, {} specified", + weight_in_grams + ); panic!(msg) } else { - return Package { from, to, weight }; + return Package { + sender_country, + recipient_country, + weight_in_grams, + }; } } fn is_international(&self) -> bool { - if self.from == self.to { + if self.sender_country == self.recipient_country { false } else { true } } - fn get_fees(&self, cost_per_kg: f32) -> f32 { - self.weight * cost_per_kg + fn get_fees(&self, cents_per_kg: i32) -> i32 { + let weight_in_kgs = (self.weight_in_grams as f32) / 1000.; + (weight_in_kgs * (cents_per_kg as f32)) as i32 } } @@ -40,28 +48,28 @@ mod tests { #[test] #[should_panic] fn fail_creating_weightless_package() { - let country_from = String::from("Spain"); - let country_to = String::from("Austria"); + let sender_country = String::from("Spain"); + let recipient_country = String::from("Austria"); - Package::new(country_from, country_to, -2.21); + Package::new(sender_country, recipient_country, -2210); } #[test] 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); + let sender_country = String::from("Spain"); + let recipient_country = String::from("Russia"); + let package = Package::new(sender_country, recipient_country, 1200); assert!(package.is_international()); } #[test] fn calculate_transport_fees() { - let country_from = String::from("Spain"); - let country_to = String::from("Spain"); + let sender_country = String::from("Spain"); + let recipient_country = String::from("Spain"); - let country_fee = 8.; - let package = Package::new(country_from, country_to, 22.0); - assert_eq!(package.get_fees(country_fee), 176.0); + let cents_per_kg = 3000; + let package = Package::new(sender_country, recipient_country, 1500); + assert_eq!(package.get_fees(cents_per_kg), 4500); } }