// structs3.rs // // Structs contain data, but can also have logic. In this 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! // // Execute `rustlings hint structs3` or use the `hint` watch subcommand for a // hint. #[derive(Debug)] struct Package { sender_country: String, recipient_country: String, weight_in_grams: i32, } impl Package { fn new(sender_country: String, recipient_country: String, weight_in_grams: i32) -> Package { if weight_in_grams <= 0 { <<<<<<< HEAD // Something goes here... panic!("Package is lighter then air!") ======= panic!("Can not ship a weightless package.") >>>>>>> 11d8aea96f2c744d970ed1ffb38785cf5b511e5e } else { Package { sender_country, recipient_country, weight_in_grams, } } } fn is_international(&self) -> bool { // Something goes here... self.recipient_country != self.sender_country } <<<<<<< HEAD fn get_fees(&self, cents_per_kg: i32) -> i32 { // Something goes here... (beware of grams to kg conversion) (self.weight_in_grams * cents_per_kg) / 100 ======= fn get_fees(&self, cents_per_gram: i32) -> ??? { // Something goes here... >>>>>>> 11d8aea96f2c744d970ed1ffb38785cf5b511e5e } } #[cfg(test)] mod tests { use super::*; #[test] #[should_panic] fn fail_creating_weightless_package() { let sender_country = String::from("Spain"); let recipient_country = String::from("Austria"); Package::new(sender_country, recipient_country, -2210); } #[test] fn create_international_package() { 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 create_local_package() { let sender_country = String::from("Canada"); let recipient_country = sender_country.clone(); let package = Package::new(sender_country, recipient_country, 1200); assert!(!package.is_international()); } #[test] fn calculate_transport_fees() { let sender_country = String::from("Spain"); let recipient_country = String::from("Spain"); <<<<<<< HEAD let cents_per_kg = 300; ======= let cents_per_gram = 3; >>>>>>> 11d8aea96f2c744d970ed1ffb38785cf5b511e5e let package = Package::new(sender_country, recipient_country, 1500); assert_eq!(package.get_fees(cents_per_gram), 4500); assert_eq!(package.get_fees(cents_per_gram * 2), 9000); } }