Skip to main content

ccase/
lib.rs

1mod app;
2
3pub use app::build as build_app;
4
5use clap::ValueEnum;
6use convert_case::{Case, Casing, Pattern};
7use convert_case_extras::case::{ALTERNATING as ALTERNATING_CASE, PSEUDO_RANDOM as PSEUDO_RANDOM_CASE, RANDOM as RANDOM_CASE, TOGGLE as TOGGLE_CASE};
8use convert_case_extras::pattern::{ALTERNATING, PSEUDO_RANDOM, RANDOM, TOGGLE};
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
11#[value(rename_all = "lowercase")]
12pub enum CaseOption {
13    Ada,
14    Camel,
15    Cobol,
16    Constant,
17    Flat,
18    Kebab,
19    Lower,
20    Pascal,
21    Sentence,
22    Snake,
23    Title,
24    Train,
25    Upper,
26    UpperFlat,
27    // from extras
28    Alternating,
29    PseudoRandom,
30    Random,
31    Toggle,
32}
33
34impl CaseOption {
35    pub fn to_case(&self) -> Case<'static> {
36        use convert_case::Case::*;
37        match self {
38            CaseOption::Ada => Ada,
39            CaseOption::Camel => Camel,
40            CaseOption::Cobol => Cobol,
41            CaseOption::Constant => Constant,
42            CaseOption::Flat => Flat,
43            CaseOption::Kebab => Kebab,
44            CaseOption::Lower => Lower,
45            CaseOption::Pascal => Pascal,
46            CaseOption::Sentence => Sentence,
47            CaseOption::Snake => Snake,
48            CaseOption::Title => Title,
49            CaseOption::Train => Train,
50            CaseOption::Upper => Upper,
51            CaseOption::UpperFlat => UpperFlat,
52            CaseOption::Alternating => ALTERNATING_CASE,
53            CaseOption::PseudoRandom => PSEUDO_RANDOM_CASE,
54            CaseOption::Random => RANDOM_CASE,
55            CaseOption::Toggle => TOGGLE_CASE,
56        }
57    }
58
59    pub fn name_in_case(&self) -> String {
60        format!("{:?}Case", self).to_case(self.to_case())
61    }
62}
63
64#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
65#[value(rename_all = "lowercase")]
66pub enum PatternOption {
67    Lowercase,
68    Uppercase,
69    Capital,
70    Sentence,
71    Camel,
72    Alternating,
73    Toggle,
74    PseudoRandom,
75    Random,
76}
77
78impl PatternOption {
79    pub fn to_pattern(&self) -> Pattern {
80        use convert_case::Pattern::*;
81        match self {
82            PatternOption::Lowercase => Lowercase,
83            PatternOption::Uppercase => Uppercase,
84            PatternOption::Capital => Capital,
85            PatternOption::Sentence => Sentence,
86            PatternOption::Camel => Camel,
87            PatternOption::Alternating => ALTERNATING,
88            PatternOption::Toggle => TOGGLE,
89            PatternOption::PseudoRandom => PSEUDO_RANDOM,
90            PatternOption::Random => RANDOM,
91        }
92    }
93
94    pub fn example(&self) -> &'static str {
95        match self {
96            PatternOption::Lowercase => "lower, lower, ...",
97            PatternOption::Uppercase => "UPPER, UPPER, ...",
98            PatternOption::Capital => "Capital, Capital, ...",
99            PatternOption::Sentence => "Capital, lower, lower, ...",
100            PatternOption::Camel => "lower, Capital, Capital, ...",
101            PatternOption::Alternating => "aLtErNaTiNg, aLtErNaTiNg, ...",
102            PatternOption::Toggle => "tOGGLE, tOGGLE, ...",
103            PatternOption::PseudoRandom => "pSUeDorANdOm, pSUedORaNdoM, ...",
104            PatternOption::Random => "RanDOM, RAndom, ...",
105        }
106    }
107}
108