1use yansi::Color;
2
3#[derive(Copy, Clone)]
4pub struct Theme {
5 pub warning: Color,
6 pub error: Color,
7
8 pub workspace: Color,
9 pub name: Color,
10 pub version: Color,
11 pub yanked: Color,
12
13 pub created_at: Color,
14 pub license: Color,
15
16 pub is_not_published: Color,
17
18 pub no_default_features: Color,
19 pub no_features: Color,
20 pub no_optional_deps: Color,
21 pub no_required_deps: Color,
22 pub no_dev_deps: Color,
23 pub no_build_deps: Color,
24
25 pub has_enabled_features: Color,
26 pub features: Color,
27 pub feature_name: Color,
28 pub feature_implies: Color,
29
30 pub probably_internal: Color,
31
32 pub default: Color,
33
34 pub required_deps: Color,
35 pub optional_deps: Color,
36
37 pub normal_deps: Color,
38
39 pub dev_deps: Color,
40 pub build_deps: Color,
41
42 pub renamed: Color,
43 pub renamed_target: Color,
44
45 pub target: Color,
46 pub dep_feature: Color,
47
48 pub tree: Color,
49}
50
51impl std::fmt::Debug for Theme {
52 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
53 f.debug_struct("Theme").finish()
54 }
55}
56
57impl Theme {
58 pub const fn basic() -> Self {
60 BASIC_THEME
61 }
62
63 pub const fn colorful() -> Self {
65 DEFAULT_THEME
66 }
67
68 pub const fn palette() -> Self {
69 PALETTE_THEME
70 }
71
72 pub const fn none() -> Self {
74 NO_THEME
75 }
76}
77
78impl Default for Theme {
79 fn default() -> Self {
80 PALETTE_THEME
81 }
82}
83
84const NO_THEME: Theme = Theme {
85 warning: Color::Unset,
86 error: Color::Unset,
87
88 workspace: Color::Unset,
89
90 name: Color::Unset,
91 version: Color::Unset,
92 yanked: Color::Unset,
93
94 created_at: Color::Unset,
95 license: Color::Unset,
96
97 is_not_published: Color::Unset,
98
99 no_default_features: Color::Unset,
100 no_features: Color::Unset,
101 no_optional_deps: Color::Unset,
102 no_required_deps: Color::Unset,
103 no_dev_deps: Color::Unset,
104 no_build_deps: Color::Unset,
105
106 has_enabled_features: Color::Unset,
107 features: Color::Unset,
108 feature_name: Color::Unset,
109 feature_implies: Color::Unset,
110
111 probably_internal: Color::Unset,
112
113 default: Color::Unset,
114
115 required_deps: Color::Unset,
116 optional_deps: Color::Unset,
117
118 normal_deps: Color::Unset,
119
120 dev_deps: Color::Unset,
121 build_deps: Color::Unset,
122
123 renamed: Color::Unset,
124 renamed_target: Color::Unset,
125
126 target: Color::Unset,
127 dep_feature: Color::Unset,
128
129 tree: Color::Unset,
130};
131
132const DEFAULT_THEME: Theme = Theme {
133 warning: Color::RGB(255, 255, 0),
134 error: Color::RGB(255, 0, 0),
135
136 workspace: Color::RGB(255, 192, 192),
137
138 name: Color::RGB(255, 192, 128),
139 version: Color::RGB(192, 192, 0),
140 yanked: Color::RGB(255, 0, 0),
141
142 created_at: Color::RGB(255, 255, 255),
143 license: Color::RGB(255, 255, 255),
144
145 is_not_published: Color::RGB(0, 153, 238),
146
147 no_default_features: Color::RGB(255, 128, 128),
148 no_features: Color::RGB(192, 192, 192),
149 no_optional_deps: Color::RGB(192, 128, 128),
150 no_required_deps: Color::RGB(192, 192, 192),
151 no_dev_deps: Color::RGB(192, 192, 192),
152 no_build_deps: Color::RGB(192, 192, 192),
153
154 has_enabled_features: Color::RGB(0, 153, 238),
155 features: Color::RGB(192, 0, 192),
156 feature_name: Color::RGB(255, 255, 255),
157 feature_implies: Color::RGB(192, 192, 255),
158
159 probably_internal: Color::RGB(128, 32, 32),
160
161 default: Color::RGB(0, 255, 0),
162
163 required_deps: Color::RGB(192, 0, 255),
164 optional_deps: Color::RGB(255, 0, 192),
165
166 normal_deps: Color::RGB(255, 124, 201),
167
168 dev_deps: Color::RGB(255, 124, 201),
169 build_deps: Color::RGB(255, 124, 201),
170
171 renamed: Color::RGB(0, 153, 238),
172 renamed_target: Color::RGB(92, 64, 255),
173
174 target: Color::RGB(192, 0, 0),
175 dep_feature: Color::RGB(128, 128, 128),
176
177 tree: Color::RGB(48, 48, 48),
178};
179
180const BASIC_THEME: Theme = Theme {
181 warning: Color::RGB(255, 255, 0),
182 error: Color::RGB(255, 0, 0),
183
184 workspace: Color::RGB(255, 192, 192),
185
186 name: Color::RGB(255, 192, 128),
187
188 yanked: Color::RGB(255, 0, 0),
189
190 feature_implies: Color::RGB(192, 192, 255),
191
192 default: Color::RGB(0, 255, 0),
193
194 tree: Color::RGB(48, 48, 48),
195
196 ..NO_THEME
197};
198
199const PALETTE_THEME: Theme = Theme {
200 warning: Color::Red,
201 error: Color::Yellow,
202
203 name: Color::Blue,
204 version: Color::Green,
205 yanked: Color::Red,
206
207 is_not_published: Color::Yellow,
208
209 no_default_features: Color::Magenta,
210 has_enabled_features: Color::Cyan,
211
212 feature_implies: Color::Cyan,
213
214 probably_internal: Color::Red,
215
216 default: Color::Yellow,
217
218 required_deps: Color::Blue,
219 optional_deps: Color::Magenta,
220
221 renamed: Color::Red,
222 renamed_target: Color::Yellow,
223
224 target: Color::Yellow,
225 dep_feature: Color::Green,
226
227 ..NO_THEME
228};