cargo_whatfeatures/printer/
theme.rs

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    /// Get a basic theme
59    pub const fn basic() -> Self {
60        BASIC_THEME
61    }
62
63    /// Get a colorful theme
64    pub const fn colorful() -> Self {
65        DEFAULT_THEME
66    }
67
68    pub const fn palette() -> Self {
69        PALETTE_THEME
70    }
71
72    /// Get a colorless theme
73    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};