Santa burst into the dev lounge, chugging his third espresso. "Great job yesterday, nerds! The is_nice function? Chef's kiss. But now, I want structure. STRUCTURE! We’re going full-on Rustacean. I need a Kid struct—immediately!"
The elves nodded enthusiastically, their tiny laptops open, running Arch Linux with bspwm because, obviously, they were that kind of devs. One elf, started yapping, "But Santa, why a struct? Isn’t this just overengineered?"
Santa slammed the table, shaking an untouched tray of gluten-free cookies. "No! A struct means no more random strings floating around. We need to encapsulate a kid's data—name, and niceness score. Plus, we’ll need some methods to make sense of it all."
The dev elves scrambled to work. In no time, they sketched out the basic blueprint. Santa glanced at the screen. "Not bad. But I will need this extended later. Keep it modular, bros!"
The room fell silent as the elves realized the implications. This was just the beginning of Santa’s unhinged data modeling spree.
The elves need your help to finish the Kid struct.
Here is what you need to do:
Niceness enum: Nice and Naughty. Nice takes the number of good deeds.Kid struct: name of type String and niceness of type Niceness.is_nice function we created on Day 3 to an associated function of the Kid struct.new() associated function for the Kid struct.If you're stuck, here are some hints to help you get back on track:
Nice(u32) to represent the number of good deeds.field_name: field_type, e.g., name: String.impl block without the self parameter.:: instead of ., e.g. Kid::is_nice(10, 1);Self::is_nice or Kid::is_nice to call the associated function from within the impl block.pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { Nice(u32), Naughty, // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}// Move yesterday's function to an associated function in the structpub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance let niceness = if is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; Kid{name, niceness} }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { Nice(u32), Naughty,}pub struct Kid { pub name: String, pub niceness: Niceness,}impl Kid { // Move yesterday's function to an associated function in the struct pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 } pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance let niceness = if Self::is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; Self { name, niceness } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)]pub enum Niceness { Nice(u32), Naughty,}pub struct Kid { pub name: String, pub niceness: Niceness,}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Self { let niceness = if Self::is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; Self { name, niceness } } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { false } else { let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness}impl Kid {// Move yesterday's function to an associated function in the structpub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75} pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let niceness = if Kid::is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; Kid { name, niceness } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}// Move yesterday's function to an associated function in the structimpl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance let niceness = match Kid::is_nice(good_deeds, bad_deeds) { true => Niceness::Nice(good_deeds), false => Niceness::Naughty, }; Kid { name, niceness, } } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { Nice(u32), Naughty // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds}pub struct Kid { pub name: String, pub niceness: Niceness // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public}// Move yesterday's function to an associated function in the structpub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { Kid{ name, niceness: match is_nice(good_deeds, bad_deeds) { true => Niceness::Nice(good_deeds), false => Niceness::Naughty, }, } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name : String, pub niceness : Niceness,}// Move yesterday's function to an associated function in the structimpl Kid { pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 } pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let niceness_val : Niceness; if Kid::is_nice(good_deeds, bad_deeds){ niceness_val = Niceness::Nice(good_deeds); }else{ niceness_val = Niceness::Naughty; } // println!("niceness_val = {niceness_val}"); // Return a Kid instance Kid{ name: name, niceness: niceness_val } } }pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}// Move yesterday's function to an associated function in the structimpl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Self { Self { name: name, niceness: Self::is_nice(good_deeds, bad_deeds) } } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> Niceness { if good_deeds == 0 && bad_deeds == 0 { return Niceness::Naughty; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); if ratio >= 0.75 { Niceness::Nice(good_deeds as u32) } else { Niceness::Naughty } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)]pub enum Niceness { Nice(usize), Naughty}pub struct Kid { pub name: String, pub niceness: Niceness}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { Self { name, niceness: Self::get_niceness(good_deeds, bad_deeds), } } pub fn get_niceness(good_deeds: u32, bad_deeds: u32) -> Niceness { if good_deeds == 0 && bad_deeds == 0 { return Niceness::Naughty; } let weighted_good_deeds = good_deeds as f32 * GOOD_WEIGHT; let weighted_bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = weighted_good_deeds / (weighted_good_deeds + weighted_bad_deeds); if ratio >= 0.75 { Niceness::Nice(good_deeds as usize) } else { Niceness::Naughty } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}// Move yesterday's function to an associated function in the structimpl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance let niceness = match Self::is_nice(good_deeds, bad_deeds) { true => Niceness::Nice(good_deeds), false => Niceness::Naughty, }; Kid { name: name.clone(), niceness: niceness, } } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { Nice(u32), Naughty, // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name : String, pub niceness : Niceness,}impl Kid { // Move yesterday's function to an associated function in the struct fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 } pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance let niceness : Niceness = match Kid::is_nice(good_deeds, bad_deeds) { true => Niceness::Nice(good_deeds), false => Niceness::Naughty, }; Kid { name : name, niceness : niceness } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Naughty, Nice (u32),}pub struct Kid { // Add a field `name` of type `String` pub name: String, // and `niceness` field of type `Niceness` pub niceness: Niceness, // Make all fields public}// Move yesterday's function to an associated function in the structpub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { if is_nice(good_deeds, bad_deeds) { return Kid { name: name, niceness: Niceness::Nice(good_deeds), } } else {} // Return a Kid instance return Kid { name: name, niceness: Niceness::Naughty, } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let niceness = if Self::is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; Kid { name, niceness, } } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Naughty, Nice(u32),}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}// Move yesterday's function to an associated function in the structimpl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance if Self::is_nice(good_deeds, bad_deeds) { Self { name, niceness: Niceness::Nice(good_deeds), } } else { Self { name, niceness: Niceness::Naughty } } } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}// Move yesterday's function to an associated function in the structpub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let niceness = if is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; Kid { name, niceness, } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { pub name: String, pub niceness: Niceness,}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let niceness = if Self::is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; Kid {name, niceness} } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance match Kid::is_nice(good_deeds, bad_deeds) { true => return Kid { name, niceness: Niceness::Nice(good_deeds) }, false => return Kid { name, niceness: Niceness::Naughty } } } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Naughty, Nice(u32)}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance let caluclated_niceness: Niceness; match Kid::is_nice(good_deeds,bad_deeds){ true => caluclated_niceness=Niceness::Nice(good_deeds), false => caluclated_niceness=Niceness::Naughty }; return Kid{ name, niceness: caluclated_niceness } } // Move yesterday's function to an associated function in the struct pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance match Self::is_nice(good_deeds, bad_deeds) { true => Kid {name: name, niceness: Niceness::Nice(good_deeds)}, false => Kid {name: name, niceness: Niceness::Naughty} } } // Move yesterday's function to an associated function in the struct pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness}impl Kid { pub fn new(name_in: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance Kid { name: name_in, niceness: Kid::is_nice(good_deeds, bad_deeds) } } // Function to an associated function in the struct pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> Niceness { if good_deeds == 0 && bad_deeds == 0 { return Niceness::Naughty; } let good_deedsF = good_deeds as f32 * GOOD_WEIGHT; let bad_deedsF = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deedsF / (good_deedsF + bad_deedsF); if ratio >= 0.75 { return Niceness::Nice(good_deeds) } else { return Niceness::Naughty } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance match Self::is_nice(good_deeds, bad_deeds) { true => Kid {name: name, niceness: Niceness::Nice(good_deeds)}, false => Kid {name: name, niceness: Niceness::Naughty} } } // Move yesterday's function to an associated function in the struct pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { Nice(u32), Naughty // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds}pub struct Kid { pub name: String, pub niceness: Niceness // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public}// Move yesterday's function to an associated function in the structimpl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let gd = good_deeds as f32 * GOOD_WEIGHT; let bd = bad_deeds as f32 * BAD_WEIGHT; let ratio = gd / (gd + bd); Kid { name, niceness: if !(good_deeds == 0 && bad_deeds == 0) && ratio >= 0.75 { Niceness::Nice(good_deeds) } else { Niceness::Naughty }, } } pub fn is_nice(&self) -> bool { matches!(self.niceness, Niceness::Nice(_)) }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness}impl Kid { pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 } pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance if Kid::is_nice(good_deeds, bad_deeds) { let niceness = Niceness::Nice(good_deeds); return Kid{ name, niceness }; } let niceness = Niceness::Naughty; Kid { name, niceness } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness}impl Kid { pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 } pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance if Kid::is_nice(good_deeds, bad_deeds) { let niceness = Niceness::Nice(good_deeds); return Kid{ name, niceness }; } let niceness = Niceness::Naughty; Kid { name, niceness } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let mut niceness = Niceness::Naughty; if Self::is_nice(good_deeds, bad_deeds) { niceness = Niceness::Nice(good_deeds); } Kid{ name, niceness } } // Move yesterday's function to an associated function in the struct pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Naughty, Nice(u32),}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}// Move yesterday's function to an associated function in the structpub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance if is_nice(good_deeds, bad_deeds) { return Kid { name: name.to_string(), niceness: Niceness::Nice(good_deeds) } } return Kid { name: name.to_string(), niceness: Niceness::Naughty, }; }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { Nice(u32), Naughty}pub struct Kid { pub name: String, pub niceness: Niceness,}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Self { let niceness = if Self::is_nice(good_deeds, bad_deeds) == true { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; Kid { name: name, niceness: niceness, } } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { Nice(u32), Naughty}pub struct Kid { pub name: String, pub niceness: Niceness}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let niceness = if good_deeds == 0 && bad_deeds == 0 { Niceness::Naughty } else { let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); if ratio >= 0.75 { Niceness::Nice(good_deeds as u32) } else { Niceness::Naughty } }; Kid { name, niceness } } pub fn is_nice(&self) -> bool { return matches!(self.niceness, Niceness::Nice(u32)); }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let niceness = if Self::is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; // Return a Kid instance Kid { name, niceness } } // Move yesterday's function to an associated function in the struct pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let niceness = if Self::is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; // Return a Kid instance Kid { name, niceness } } // Move yesterday's function to an associated function in the struct pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance // Return a Kid instance let niceness:Niceness = if Self::is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; Kid { name,niceness} } // Move yesterday's function to an associated function in the struct pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}// Move yesterday's function to an associated function in the structimpl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance Self { name: name, niceness: if Self::is_nice(good_deeds, bad_deeds){Niceness::Nice(good_deeds)} else { Niceness::Naughty }, } } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }} pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness, // self.is_nice: bool = is_nice,}// Move yesterday's function to an associated function in the structpub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance let naughty_or_nice:Niceness = if is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; return Kid{ name: name, niceness: naughty_or_nice }; }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Naughty, Nice(u32),}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}// Move yesterday's function to an associated function in the structpub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance let naughty_or_nice: Niceness = if is_nice(good_deeds, bad_deeds) == true { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; Kid{name:name, niceness:naughty_or_nice} }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { Nice(u32), Naughty}pub struct Kid { pub name: String, pub niceness: Niceness}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let niceness = if Self::is_nice(good_deeds,bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; Self {name, niceness} } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }} pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}// Move yesterday's function to an associated function in the structimpl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { use Niceness::*; // Return a Kid instance if Self::is_nice(good_deeds, bad_deeds){ Kid{ name, niceness: Nice(good_deeds) } }else{ Kid{ name, niceness: Naughty } } } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75}}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { Nice(u32), Naughty}pub struct Kid { pub name: String, pub niceness: Niceness,}impl Kid { pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 } pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { if Kid::is_nice(good_deeds, bad_deeds) { Kid { name, niceness: Niceness::Nice(good_deeds) } } else { Kid { name, niceness: Niceness::Naughty } } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}impl Kid { // Move yesterday's function to an associated function in the struct pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 } pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let niceness; if Self::is_nice(good_deeds, bad_deeds) { niceness = Niceness::Nice(good_deeds); } else { niceness = Niceness::Naughty; } Self { name, niceness, } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { Self { name, niceness: Self::is_nice(good_deeds, bad_deeds) } } fn is_nice(good_deeds: u32, bad_deeds: u32) -> Niceness { if good_deeds == 0 && bad_deeds == 0 { return Niceness::Naughty; } let good = good_deeds as f32 * GOOD_WEIGHT; let bad = bad_deeds as f32 * BAD_WEIGHT; let ratio = good / (good + bad); if ratio >= 0.75 { Niceness::Nice(good_deeds) } else { Niceness::Naughty } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}impl Kid { pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 } pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance Kid { name, niceness: if Kid::is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }, } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance let niceness; if Self::is_nice(good_deeds, bad_deeds) { niceness = Niceness::Nice(good_deeds); } else { niceness = Niceness::Naughty; } Kid { name, niceness } } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}// Move yesterday's function to an associated function in the structimpl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance Kid { name, niceness: match Kid::is_nice(good_deeds, bad_deeds) { true => Niceness::Nice(good_deeds), false => Niceness::Naughty, } } } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness}// Move yesterday's function to an associated function in the structimpl Kid { pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 } pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let niceness = if Kid::is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; Kid {name: name, niceness: niceness} }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)]pub enum Niceness { Nice(u32), Naughty,}pub struct Kid { pub name: String, pub niceness: Niceness}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { let niceness = if Self::is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }; Self { name, niceness } } pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { Nice(u32), Naughty, // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds}pub struct Kid { pub name: String, pub niceness: Niceness, // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public}// Move yesterday's function to an associated function in the structpub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { Kid { name, niceness: if is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }, } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { Nice(u32), Naughty, // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds}pub struct Kid { pub name: String, pub niceness: Niceness, // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public}// Move yesterday's function to an associated function in the structpub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { Kid { name, niceness: if is_nice(good_deeds, bad_deeds) { Niceness::Nice(good_deeds) } else { Niceness::Naughty }, } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice (u32), Naughty}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness}// Move yesterday's function to an associated function in the structpub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance Kid { name: name, niceness: if is_nice(good_deeds, bad_deeds) { Niceness::Nice (good_deeds) } else { Niceness::Naughty } } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}// Move yesterday's function to an associated function in the structimpl Kid { pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> Niceness { if good_deeds == 0 && bad_deeds == 0 { return Niceness::Naughty; } let org_good_deeds = good_deeds; let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); if ratio >= 0.75 { Niceness::Nice(org_good_deeds) } else { Niceness::Naughty } }}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance Kid { name, niceness: Kid::is_nice(good_deeds, bad_deeds), } }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}impl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { Kid { name: name, niceness: if Self::is_nice(good_deeds, bad_deeds) {Niceness::Nice(good_deeds)} else {Niceness::Naughty}, } } // Move yesterday's function to an associated function in the struct pub fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75 }}pub const GOOD_WEIGHT: f32 = 1.0;pub const BAD_WEIGHT: f32 = 2.0;#[derive(Debug, PartialEq)] // needed for testspub enum Niceness { // Create the enum variants `Nice` and `Naughty` // Variant `Nice` is a tuple struct that holds the number of good deeds Nice(u32), Naughty,}pub struct Kid { // Add a field `name` of type `String` // and `niceness` field of type `Niceness` // Make all fields public pub name: String, pub niceness: Niceness,}// Move yesterday's function to an associated function in the structimpl Kid { pub fn new(name: String, good_deeds: u32, bad_deeds: u32) -> Kid { // Return a Kid instance Kid{ name: name, niceness: match Self::is_nice(good_deeds, bad_deeds) { true => Niceness::Nice(good_deeds), false => Niceness::Naughty } } } fn is_nice(good_deeds: u32, bad_deeds: u32) -> bool { if good_deeds == 0 && bad_deeds == 0 { return false; } let good_deeds = good_deeds as f32 * GOOD_WEIGHT; let bad_deeds = bad_deeds as f32 * BAD_WEIGHT; let ratio = good_deeds / (good_deeds + bad_deeds); ratio >= 0.75}}