main.rs
1 #[derive(Debug, PartialEq, Copy, Clone)] 2 enum ShirtColor { 3 Red, 4 Blue, 5 } 6 7 struct Inventory { 8 shirts: Vec<ShirtColor>, 9 } 10 11 impl Inventory { 12 fn giveaway(&self, user_preference: Option<ShirtColor>) -> ShirtColor { 13 user_preference.unwrap_or_else(|| self.most_stocked()) 14 } 15 16 fn most_stocked(&self) -> ShirtColor { 17 let mut num_red = 0; 18 let mut num_blue = 0; 19 20 for color in &self.shirts { 21 match color { 22 ShirtColor::Red => num_red += 1, 23 ShirtColor::Blue => num_blue += 1, 24 } 25 } 26 if num_red > num_blue { 27 ShirtColor::Red 28 } else { 29 ShirtColor::Blue 30 } 31 } 32 } 33 34 fn main() { 35 let store = Inventory { 36 shirts: vec![ShirtColor::Blue, ShirtColor::Red, ShirtColor::Blue], 37 }; 38 39 let user_pref1 = Some(ShirtColor::Red); 40 let giveaway1 = store.giveaway(user_pref1); 41 println!( 42 "The user with preference {:?} gets {:?}", 43 user_pref1, giveaway1 44 ); 45 46 let user_pref2 = None; 47 let giveaway2 = store.giveaway(user_pref2); 48 println!( 49 "The user with preference {:?} gets {:?}", 50 user_pref2, giveaway2 51 ); 52 }