Something went wrong. Try again.
Rustlings practice.
Something went wrong. Try again.
2.2 kB · 83 lines
Rust
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384#[derive(Debug)]struct Package { sender_country: String, recipient_country: String, weight_in_grams: u32,}
impl Package { fn new(sender_country: String, recipient_country: String, weight_in_grams: u32) -> Self { if weight_in_grams < 10 { // This isn't how you should handle errors in Rust, but we will // learn about error handling later. panic!("Can't ship a package with weight below 10 grams"); }
Self { sender_country, recipient_country, weight_in_grams, } }
fn is_international(&self) -> bool { // ^^^^^^^ added self.sender_country != self.recipient_country }
fn get_fees(&self, cents_per_gram: u32) -> u32 { // ^^^^^^ added self.weight_in_grams * cents_per_gram }}
fn main() { // You can optionally experiment here.}
#[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, 5); }
#[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");
let cents_per_gram = 3;
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); }}