1use std::str::FromStr;
2
3#[derive(Debug, Eq, PartialEq, Copy, Clone)]
6pub enum Case {
7 Snake,
8 Kebab,
9 Pascal,
10 Camel,
11 Title,
12 Sentence,
13 Lower,
14 Upper,
15}
16
17#[derive(Debug, Eq, PartialEq)]
18pub enum ParseCaseError {
19 InvalidFormat,
20}
21
22impl FromStr for Case {
23 type Err = ParseCaseError;
24
25 fn from_str(format: &str) -> Result<Case, ParseCaseError> {
26 let case = match format {
27 "snake" => Case::Snake,
28 "kebab" => Case::Kebab,
29 "pascal" => Case::Pascal,
30 "camel" => Case::Camel,
31 "title" => Case::Title,
32 "sentence" => Case::Sentence,
33 "lower" => Case::Lower,
34 "upper" => Case::Upper,
35 _ => return Err(ParseCaseError::InvalidFormat),
36 };
37
38 Ok(case)
39 }
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45
46 #[test]
47 fn str_can_be_parsed_to_a_format() {
48 assert_eq!(Case::Snake, "snake".parse::<Case>().unwrap());
49 assert_eq!(Case::Kebab, "kebab".parse::<Case>().unwrap());
50 assert_eq!(Case::Camel, "camel".parse::<Case>().unwrap());
51 assert_eq!(Case::Pascal, "pascal".parse::<Case>().unwrap());
52 assert_eq!(Case::Title, "title".parse::<Case>().unwrap());
53 assert_eq!(Case::Sentence, "sentence".parse::<Case>().unwrap());
54 assert_eq!(Case::Lower, "lower".parse::<Case>().unwrap());
55 assert_eq!(Case::Upper, "upper".parse::<Case>().unwrap());
56 assert!("alsdkfj".parse::<Case>().is_err());
57 }
58}