use serde_derive::Serialize; #[derive(clap::ValueEnum, Clone, Default, Debug, Serialize, PartialEq, FromFormField)] pub enum CapStyle { Cylinder, #[default] Dome, Pointed, } #[derive(Debug, PartialEq, Clone, FromForm)] pub struct Mushroom { /// Stalk height in millimeters. Zero for default. #[field(default = 66.0)] pub stalk_h: f32, /// Stalk diameter in millimeters. Zero for default. #[field(default = 5.0)] pub stalk_r: f32, /// Cap height in millimeters. Zero for default. #[field(default = 34.0)] pub cap_h: f32, /// Stalk diameter in millimeters. Zero for default. #[field(default = 50.0)] pub cap_r: f32, /// General shape of the cap. #[field(default = CapStyle::Dome)] pub cap_style: CapStyle, } impl Mushroom { /// Total height of the mushroom. pub fn height(&self) -> f32 { return self.stalk_h + self.cap_h; } /// Maximum radius of the mushroom. pub fn radius(&self) -> f32 { return self.stalk_r.max(self.cap_r) / 2.0; } }