1use std::ops::Deref;
2
3#[derive(Debug, Clone, PartialEq, Eq, Hash)]
5#[non_exhaustive]
6pub enum UserStyle {
7 Main,
8
9 Pos,
11
12 Cmd,
14
15 EqualWithValue,
17
18 Argument,
20
21 EmbeddedValue,
23
24 EmbeddedValuePlus,
26
27 CombinedOption,
29
30 Boolean,
32
33 Flag,
35}
36
37#[derive(Debug, Clone)]
39pub struct OptStyleManager {
40 styles: Vec<UserStyle>,
41}
42
43impl Default for OptStyleManager {
44 fn default() -> Self {
45 Self {
46 styles: vec![
47 UserStyle::EqualWithValue,
48 UserStyle::Argument,
49 UserStyle::Boolean,
50 UserStyle::EmbeddedValue,
51 ],
52 }
53 }
54}
55
56impl OptStyleManager {
57 pub fn with(mut self, styles: Vec<UserStyle>) -> Self {
58 self.styles = styles;
59 self
60 }
61
62 pub fn set(&mut self, styles: Vec<UserStyle>) -> &mut Self {
63 self.styles = styles;
64 self
65 }
66
67 pub fn remove(&mut self, style: UserStyle) -> &mut Self {
68 if let Some((index, _)) = self.styles.iter().enumerate().find(|v| v.1 == &style) {
69 self.styles.remove(index);
70 }
71 self
72 }
73
74 pub fn insert(&mut self, index: usize, style: UserStyle) -> &mut Self {
75 self.styles.insert(index, style);
76 self
77 }
78
79 pub fn push(&mut self, style: UserStyle) -> &mut Self {
80 if !self.styles.iter().any(|v| v == &style) {
81 self.styles.push(style);
82 }
83 self
84 }
85}
86
87impl Deref for OptStyleManager {
88 type Target = Vec<UserStyle>;
89
90 fn deref(&self) -> &Self::Target {
91 &self.styles
92 }
93}