1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
use std::{fmt, str::FromStr}; pub enum CowShape { Clippy, Cow, Moose, Ferris, } const COW: &str = r#" \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||"#; const CLIPPY: &str = r#" \ \ __ / \ | | @ @ | | || |/ || || |\_/| \___/"#; const FERRIS: &str = r#" \ \ _~^~^~_ \) / o o \ (/ '_ - _' / '-----' \"#; const MOOSE: &str = r#" \ \ \_\_ _/_/ \ \__/ (oo)\_______ (__)\ )\/\ ||----w | || ||"#; impl fmt::Display for CowShape { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let display = match self { CowShape::Cow => COW, CowShape::Clippy => CLIPPY, CowShape::Ferris => FERRIS, CowShape::Moose => MOOSE, }; f.write_str(display) } } impl FromStr for CowShape { type Err = &'static str; fn from_str(s: &str) -> Result<Self, Self::Err> { match s { "cow" => Ok(CowShape::Cow), "clippy" => Ok(CowShape::Clippy), "ferris" => Ok(CowShape::Ferris), "moose" => Ok(CowShape::Moose), _ => Err("Unknown Value"), } } }