rust_recipe/
restricted_diet.rs1use core::fmt;
2use std::str::FromStr;
3
4#[derive(Debug, PartialEq)]
7pub enum RestrictedDiet {
8 UnknownDiet,
9 DiabeticDiet,
10 GlutenFreeDiet,
11 HalalDiet,
12 HinduDiet,
13 KosherDiet,
14 LowCalorieDiet,
15 LowFatDiet,
16 LowLactoseDiet,
17 LowSaltDiet,
18 VeganDiet,
19 VegetarianDiet,
20}
21
22#[derive(Debug)]
23pub struct RestrictedDietError;
24
25impl FromStr for RestrictedDiet {
26 type Err = RestrictedDietError;
27
28 fn from_str(s: &str) -> Result<Self, Self::Err> {
29 match s {
30 "UnknownDiet" => Ok(RestrictedDiet::UnknownDiet),
31 "DiabeticDiet" => Ok(RestrictedDiet::DiabeticDiet),
32 "GlutenFreeDiet" => Ok(RestrictedDiet::GlutenFreeDiet),
33 "HalalDiet" => Ok(RestrictedDiet::HalalDiet),
34 "HinduDiet" => Ok(RestrictedDiet::HinduDiet),
35 "KosherDiet" => Ok(RestrictedDiet::KosherDiet),
36 "LowCalorieDiet" => Ok(RestrictedDiet::LowCalorieDiet),
37 "LowFatDiet" => Ok(RestrictedDiet::LowFatDiet),
38 "LowLactoseDiet" => Ok(RestrictedDiet::LowLactoseDiet),
39 "LowSaltDiet" => Ok(RestrictedDiet::LowSaltDiet),
40 "VeganDiet" => Ok(RestrictedDiet::VeganDiet),
41 "VegetarianDiet" => Ok(RestrictedDiet::VegetarianDiet),
42 _ => Err(RestrictedDietError {}),
43 }
44 }
45}
46
47impl fmt::Display for RestrictedDiet {
48 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
49 match self {
50 RestrictedDiet::UnknownDiet => write!(f, "Unknown"),
51 RestrictedDiet::DiabeticDiet => write!(f, " Diabetic"),
52 RestrictedDiet::GlutenFreeDiet => write!(f, "Gluten Free"),
53 RestrictedDiet::HalalDiet => write!(f, "Halal"),
54 RestrictedDiet::HinduDiet => write!(f, "Hindu"),
55 RestrictedDiet::KosherDiet => write!(f, "Kosher"),
56 RestrictedDiet::LowCalorieDiet => write!(f, "Low Calorie"),
57 RestrictedDiet::LowFatDiet => write!(f, "Low Fat"),
58 RestrictedDiet::LowLactoseDiet => write!(f, "Low Lactose"),
59 RestrictedDiet::LowSaltDiet => write!(f, "Low Salt"),
60 RestrictedDiet::VeganDiet => write!(f, "Vegan"),
61 RestrictedDiet::VegetarianDiet => write!(f, "Vegetarian"),
62 }
63 }
64}
65
66#[cfg(test)]
67mod tests {
68 use super::*;
69
70 #[test]
71 fn test_from_str_success() -> Result<(), RestrictedDietError> {
72 assert_eq!(RestrictedDiet::UnknownDiet, "UnknownDiet".parse()?);
73 assert_eq!(RestrictedDiet::DiabeticDiet, "DiabeticDiet".parse()?);
74 assert_eq!(RestrictedDiet::GlutenFreeDiet, "GlutenFreeDiet".parse()?);
75 assert_eq!(RestrictedDiet::HalalDiet, "HalalDiet".parse()?);
76 assert_eq!(RestrictedDiet::HinduDiet, "HinduDiet".parse()?);
77 assert_eq!(RestrictedDiet::KosherDiet, "KosherDiet".parse()?);
78 assert_eq!(RestrictedDiet::LowCalorieDiet, "LowCalorieDiet".parse()?);
79 assert_eq!(RestrictedDiet::LowFatDiet, "LowFatDiet".parse()?);
80 assert_eq!(RestrictedDiet::LowLactoseDiet, "LowLactoseDiet".parse()?);
81 assert_eq!(RestrictedDiet::LowSaltDiet, "LowSaltDiet".parse()?);
82 assert_eq!(RestrictedDiet::VeganDiet, "VeganDiet".parse()?);
83 assert_eq!(RestrictedDiet::VegetarianDiet, "VegetarianDiet".parse()?);
84 Ok(())
85 }
86
87 #[test]
88 fn test_from_str_failure() {
89 let res = "Invalid".parse::<RestrictedDiet>();
90 assert!(res.is_err())
91 }
92}