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 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