1use serde::Deserialize;
2
3#[derive(Deserialize, Debug)]
4pub struct Theme {
5 #[serde(rename = "$schema")]
6 pub schema: String,
7 pub name: String,
8 pub author: String,
9 pub maintainers: Vec<String>,
10 pub semantic_class: String,
11 pub semantic_highlighting: bool,
12 pub colors: VSCodeColors,
13}
14
15#[derive(Debug, Deserialize)]
16pub struct VSCodeColors {
17 #[serde(rename = "vsc_terminal_background")]
18 terminal_background: String,
19 #[serde(rename = "vsc_terminal_foreground")]
20 terminal_foreground: String,
21 #[serde(rename = "vsc_terminal_ansi_bright_black")]
22 terminal_ansi_bright_black: String,
23 #[serde(rename = "vsc_terminal_ansi_bright_red")]
24 terminal_ansi_bright_red: String,
25 #[serde(rename = "vsc_terminal_ansi_bright_green")]
26 terminal_ansi_bright_green: String,
27 #[serde(rename = "vsc_terminal_ansi_bright_yellow")]
28 terminal_ansi_bright_yellow: String,
29 #[serde(rename = "vsc_terminal_ansi_bright_blue")]
30 terminal_ansi_bright_blue: String,
31 #[serde(rename = "vsc_terminal_ansi_bright_magenta")]
32 terminal_ansi_bright_magenta: String,
33 #[serde(rename = "vsc_terminal_ansi_bright_cyan")]
34 terminal_ansi_bright_cyan: String,
35 #[serde(rename = "vsc_terminal_ansi_bright_white")]
36 terminal_ansi_bright_white: String,
37 #[serde(rename = "vsc_terminal_ansi_black")]
38 terminal_ansi_black: String,
39 #[serde(rename = "vsc_terminal_ansi_red")]
40 terminal_ansi_red: String,
41 #[serde(rename = "vsc_terminal_ansi_green")]
42 terminal_ansi_green: String,
43 #[serde(rename = "vsc_terminal_ansi_yellow")]
44 terminal_ansi_yellow: String,
45 #[serde(rename = "vsc_terminal_ansi_blue")]
46 terminal_ansi_blue: String,
47 #[serde(rename = "vsc_terminal_ansi_magenta")]
48 terminal_ansi_magenta: String,
49 #[serde(rename = "vsc_terminal_ansi_cyan")]
50 terminal_ansi_cyan: String,
51 #[serde(rename = "vsc_terminal_ansi_white")]
52 terminal_ansi_white: String,
53 #[serde(rename = "vsc_focus_border")]
54 focus_border: String,
55 #[serde(rename = "vsc_foreground")]
56 foreground: String,
57 #[serde(rename = "vsc_selection_background")]
58 selection_background: String,
59 #[serde(rename = "vsc_error_foreground")]
60 error_foreground: String,
61 #[serde(rename = "vsc_button_background")]
62 button_background: String,
63 #[serde(rename = "vsc_button_foreground")]
64 button_foreground: String,
65 #[serde(rename = "vsc_button_secondary_background")]
66 button_secondary_background: String,
67 #[serde(rename = "vsc_button_secondary_foreground")]
68 button_secondary_foreground: String,
69 #[serde(rename = "vsc_button_secondary_hover_background")]
70 button_secondary_hover_background: String,
71 #[serde(rename = "vsc_dropdown_background")]
72 dropdown_background: String,
73 #[serde(rename = "vsc_dropdown_border")]
74 dropdown_border: String,
75 #[serde(rename = "vsc_dropdown_foreground")]
76 dropdown_foreground: String,
77 #[serde(rename = "vsc_input_background")]
78 input_background: String,
79 #[serde(rename = "vsc_input_foreground")]
80 input_foreground: String,
81 #[serde(rename = "vsc_input_border")]
82 input_border: String,
83 #[serde(rename = "vsc_input_placeholder_foreground")]
84 input_placeholder_foreground: String,
85 #[serde(rename = "vsc_input_option_active_border")]
86 input_option_active_border: String,
87 #[serde(rename = "vsc_input_validation_info_border")]
88 input_validation_info_border: String,
89 #[serde(rename = "vsc_input_validation_warning_border")]
90 input_validation_warning_border: String,
91 #[serde(rename = "vsc_input_validation_error_border")]
92 input_validation_error_border: String,
93 #[serde(rename = "vsc_badge_foreground")]
94 badge_foreground: String,
95 #[serde(rename = "vsc_badge_background")]
96 badge_background: String,
97 #[serde(rename = "vsc_progress_bar_background")]
98 progress_bar_background: String,
99 #[serde(rename = "vsc_list_active_selection_background")]
100 list_active_selection_background: String,
101 #[serde(rename = "vsc_list_active_selection_foreground")]
102 list_active_selection_foreground: String,
103 #[serde(rename = "vsc_list_drop_background")]
104 list_drop_background: String,
105 #[serde(rename = "vsc_list_focus_background")]
106 list_focus_background: String,
107 #[serde(rename = "vsc_list_highlight_foreground")]
108 list_highlight_foreground: String,
109 #[serde(rename = "vsc_list_hover_background")]
110 list_hover_background: String,
111 #[serde(rename = "vsc_list_inactive_selection_background")]
112 list_inactive_selection_background: String,
113 #[serde(rename = "vsc_list_warning_foreground")]
114 list_warning_foreground: String,
115 #[serde(rename = "vsc_list_error_foreground")]
116 list_error_foreground: String,
117 #[serde(rename = "vsc_activity_bar_background")]
118 activity_bar_background: String,
119 #[serde(rename = "vsc_activity_bar_inactive_foreground")]
120 activity_bar_inactive_foreground: String,
121 #[serde(rename = "vsc_activity_bar_foreground")]
122 activity_bar_foreground: String,
123 #[serde(rename = "vsc_activity_bar_active_border")]
124 activity_bar_active_border: String,
125 #[serde(rename = "vsc_activity_bar_active_background")]
126 activity_bar_active_background: String,
127 #[serde(rename = "vsc_activity_bar_badge_background")]
128 activity_bar_badge_background: String,
129 #[serde(rename = "vsc_activity_bar_badge_foreground")]
130 activity_bar_badge_foreground: String,
131 #[serde(rename = "vsc_side_bar_background")]
132 side_bar_background: String,
133 #[serde(rename = "vsc_side_bar_title_foreground")]
134 side_bar_title_foreground: String,
135 #[serde(rename = "vsc_side_bar_section_header_background")]
136 side_bar_section_header_background: String,
137 #[serde(rename = "vsc_side_bar_section_header_border")]
138 side_bar_section_header_border: String,
139 #[serde(rename = "vsc_editor_group_border")]
140 editor_group_border: String,
141 #[serde(rename = "vsc_editor_group_drop_background")]
142 editor_group_drop_background: String,
143 #[serde(rename = "vsc_editor_group_header_tabs_background")]
144 editor_group_header_tabs_background: String,
145 #[serde(rename = "vsc_tab_active_background")]
146 tab_active_background: String,
147 #[serde(rename = "vsc_tab_active_foreground")]
148 tab_active_foreground: String,
149 #[serde(rename = "vsc_tab_border")]
150 tab_border: String,
151 #[serde(rename = "vsc_tab_active_border_top")]
152 tab_active_border_top: String,
153 #[serde(rename = "vsc_tab_inactive_background")]
154 tab_inactive_background: String,
155 #[serde(rename = "vsc_tab_inactive_foreground")]
156 tab_inactive_foreground: String,
157 #[serde(rename = "vsc_editor_foreground")]
158 editor_foreground: String,
159 #[serde(rename = "vsc_editor_background")]
160 editor_background: String,
161 #[serde(rename = "vsc_editor_line_number_foreground")]
162 editor_line_number_foreground: String,
163 #[serde(rename = "vsc_editor_selection_background")]
164 editor_selection_background: String,
165 #[serde(rename = "vsc_editor_selection_highlight_background")]
166 editor_selection_highlight_background: String,
167 #[serde(rename = "vsc_editor_fold_background")]
168 editor_fold_background: String,
169 #[serde(rename = "vsc_editor_word_highlight_background")]
170 editor_word_highlight_background: String,
171 #[serde(rename = "vsc_editor_word_highlight_strong_background")]
172 editor_word_highlight_strong_background: String,
173 #[serde(rename = "vsc_editor_find_match_background")]
174 editor_find_match_background: String,
175 #[serde(rename = "vsc_editor_find_match_highlight_background")]
176 editor_find_match_highlight_background: String,
177 #[serde(rename = "vsc_editor_find_range_highlight_background")]
178 editor_find_range_highlight_background: String,
179 #[serde(rename = "vsc_editor_hover_highlight_background")]
180 editor_hover_highlight_background: String,
181 #[serde(rename = "vsc_editor_line_highlight_border")]
182 editor_line_highlight_border: String,
183 #[serde(rename = "vsc_editor_link_active_foreground")]
184 editor_link_active_foreground: String,
185 #[serde(rename = "vsc_editor_range_highlight_background")]
186 editor_range_highlight_background: String,
187 #[serde(rename = "vsc_editor_snippet_tabstop_highlight_background")]
188 editor_snippet_tabstop_highlight_background: String,
189 #[serde(rename = "vsc_editor_snippet_tabstop_highlight_border")]
190 editor_snippet_tabstop_highlight_border: String,
191 #[serde(rename = "vsc_editor_snippet_final_tabstop_highlight_background")]
192 editor_snippet_final_tabstop_highlight_background: String,
193 #[serde(rename = "vsc_editor_snippet_final_tabstop_highlight_border")]
194 editor_snippet_final_tabstop_highlight_border: String,
195 #[serde(rename = "vsc_editor_whitespace_foreground")]
196 editor_whitespace_foreground: String,
197 #[serde(rename = "vsc_editor_indent_guide_background")]
198 editor_indent_guide_background: String,
199 #[serde(rename = "vsc_editor_indent_guide_active_background")]
200 editor_indent_guide_active_background: String,
201 #[serde(rename = "vsc_editor_ruler_foreground")]
202 editor_ruler_foreground: String,
203 #[serde(rename = "vsc_editor_code_lens_foreground")]
204 editor_code_lens_foreground: String,
205 #[serde(rename = "vsc_editor_bracket_highlight_foreground1")]
206 editor_bracket_highlight_foreground1: String,
207 #[serde(rename = "vsc_editor_bracket_highlight_foreground2")]
208 editor_bracket_highlight_foreground2: String,
209 #[serde(rename = "vsc_editor_bracket_highlight_foreground3")]
210 editor_bracket_highlight_foreground3: String,
211 #[serde(rename = "vsc_editor_bracket_highlight_foreground4")]
212 editor_bracket_highlight_foreground4: String,
213 #[serde(rename = "vsc_editor_bracket_highlight_foreground5")]
214 editor_bracket_highlight_foreground5: String,
215 #[serde(rename = "vsc_editor_bracket_highlight_foreground6")]
216 editor_bracket_highlight_foreground6: String,
217 #[serde(rename = "vsc_editor_bracket_highlight_unexpected_bracket_foreground")]
218 editor_bracket_highlight_unexpected_bracket_foreground: String,
219 #[serde(rename = "vsc_editor_overview_ruler_border")]
220 editor_overview_ruler_border: String,
221 #[serde(rename = "vsc_editor_overview_ruler_selection_highlight_foreground")]
222 editor_overview_ruler_selection_highlight_foreground: String,
223 #[serde(rename = "vsc_editor_overview_ruler_word_highlight_foreground")]
224 editor_overview_ruler_word_highlight_foreground: String,
225 #[serde(rename = "vsc_editor_overview_ruler_word_highlight_strong_foreground")]
226 editor_overview_ruler_word_highlight_strong_foreground: String,
227 #[serde(rename = "vsc_editor_overview_ruler_modified_foreground")]
228 editor_overview_ruler_modified_foreground: String,
229 #[serde(rename = "vsc_editor_overview_ruler_added_foreground")]
230 editor_overview_ruler_added_foreground: String,
231 #[serde(rename = "vsc_editor_overview_ruler_deleted_foreground")]
232 editor_overview_ruler_deleted_foreground: String,
233 #[serde(rename = "vsc_editor_overview_ruler_error_foreground")]
234 editor_overview_ruler_error_foreground: String,
235 #[serde(rename = "vsc_editor_overview_ruler_warning_foreground")]
236 editor_overview_ruler_warning_foreground: String,
237 #[serde(rename = "vsc_editor_overview_ruler_info_foreground")]
238 editor_overview_ruler_info_foreground: String,
239 #[serde(rename = "vsc_editor_error_foreground")]
240 editor_error_foreground: String,
241 #[serde(rename = "vsc_editor_warning_foreground")]
242 editor_warning_foreground: String,
243 #[serde(rename = "vsc_editor_gutter_modified_background")]
244 editor_gutter_modified_background: String,
245 #[serde(rename = "vsc_editor_gutter_added_background")]
246 editor_gutter_added_background: String,
247 #[serde(rename = "vsc_editor_gutter_deleted_background")]
248 editor_gutter_deleted_background: String,
249 #[serde(rename = "vsc_git_decoration_modified_resource_foreground")]
250 git_decoration_modified_resource_foreground: String,
251 #[serde(rename = "vsc_git_decoration_deleted_resource_foreground")]
252 git_decoration_deleted_resource_foreground: String,
253 #[serde(rename = "vsc_git_decoration_untracked_resource_foreground")]
254 git_decoration_untracked_resource_foreground: String,
255 #[serde(rename = "vsc_git_decoration_ignored_resource_foreground")]
256 git_decoration_ignored_resource_foreground: String,
257 #[serde(rename = "vsc_git_decoration_conflicting_resource_foreground")]
258 git_decoration_conflicting_resource_foreground: String,
259 #[serde(rename = "vsc_diff_editor_inserted_text_background")]
260 diff_editor_inserted_text_background: String,
261 #[serde(rename = "vsc_diff_editor_removed_text_background")]
262 diff_editor_removed_text_background: String,
263 #[serde(rename = "vsc_inline_chat_region_highlight")]
264 inline_chat_region_highlight: String,
265 #[serde(rename = "vsc_editor_widget_background")]
266 editor_widget_background: String,
267 #[serde(rename = "vsc_editor_suggest_widget_background")]
268 editor_suggest_widget_background: String,
269 #[serde(rename = "vsc_editor_suggest_widget_foreground")]
270 editor_suggest_widget_foreground: String,
271 #[serde(rename = "vsc_editor_suggest_widget_selected_background")]
272 editor_suggest_widget_selected_background: String,
273 #[serde(rename = "vsc_editor_hover_widget_background")]
274 editor_hover_widget_background: String,
275 #[serde(rename = "vsc_editor_hover_widget_border")]
276 editor_hover_widget_border: String,
277 #[serde(rename = "vsc_editor_marker_navigation_background")]
278 editor_marker_navigation_background: String,
279 #[serde(rename = "vsc_peek_view_border")]
280 peek_view_border: String,
281 #[serde(rename = "vsc_peek_view_editor_background")]
282 peek_view_editor_background: String,
283 #[serde(rename = "vsc_peek_view_editor_match_highlight_background")]
284 peek_view_editor_match_highlight_background: String,
285 #[serde(rename = "vsc_peek_view_result_background")]
286 peek_view_result_background: String,
287 #[serde(rename = "vsc_peek_view_result_file_foreground")]
288 peek_view_result_file_foreground: String,
289 #[serde(rename = "vsc_peek_view_result_line_foreground")]
290 peek_view_result_line_foreground: String,
291 #[serde(rename = "vsc_peek_view_result_match_highlight_background")]
292 peek_view_result_match_highlight_background: String,
293 #[serde(rename = "vsc_peek_view_result_selection_background")]
294 peek_view_result_selection_background: String,
295 #[serde(rename = "vsc_peek_view_result_selection_foreground")]
296 peek_view_result_selection_foreground: String,
297 #[serde(rename = "vsc_peek_view_title_background")]
298 peek_view_title_background: String,
299 #[serde(rename = "vsc_peek_view_title_description_foreground")]
300 peek_view_title_description_foreground: String,
301 #[serde(rename = "vsc_peek_view_title_label_foreground")]
302 peek_view_title_label_foreground: String,
303 #[serde(rename = "vsc_merge_current_header_background")]
304 merge_current_header_background: String,
305 #[serde(rename = "vsc_merge_incoming_header_background")]
306 merge_incoming_header_background: String,
307 #[serde(rename = "vsc_editor_overview_ruler_current_content_foreground")]
308 editor_overview_ruler_current_content_foreground: String,
309 #[serde(rename = "vsc_editor_overview_ruler_incoming_content_foreground")]
310 editor_overview_ruler_incoming_content_foreground: String,
311 #[serde(rename = "vsc_panel_background")]
312 panel_background: String,
313 #[serde(rename = "vsc_panel_border")]
314 panel_border: String,
315 #[serde(rename = "vsc_panel_title_active_border")]
316 panel_title_active_border: String,
317 #[serde(rename = "vsc_panel_title_active_foreground")]
318 panel_title_active_foreground: String,
319 #[serde(rename = "vsc_panel_title_inactive_foreground")]
320 panel_title_inactive_foreground: String,
321 #[serde(rename = "vsc_status_bar_background")]
322 status_bar_background: String,
323 #[serde(rename = "vsc_status_bar_foreground")]
324 status_bar_foreground: String,
325 #[serde(rename = "vsc_status_bar_debugging_background")]
326 status_bar_debugging_background: String,
327 #[serde(rename = "vsc_status_bar_debugging_foreground")]
328 status_bar_debugging_foreground: String,
329 #[serde(rename = "vsc_status_bar_no_folder_background")]
330 status_bar_no_folder_background: String,
331 #[serde(rename = "vsc_status_bar_no_folder_foreground")]
332 status_bar_no_folder_foreground: String,
333 #[serde(rename = "vsc_status_bar_item_prominent_background")]
334 status_bar_item_prominent_background: String,
335 #[serde(rename = "vsc_status_bar_item_prominent_hover_background")]
336 status_bar_item_prominent_hover_background: String,
337 #[serde(rename = "vsc_status_bar_item_remote_foreground")]
338 status_bar_item_remote_foreground: String,
339 #[serde(rename = "vsc_status_bar_item_remote_background")]
340 status_bar_item_remote_background: String,
341 #[serde(rename = "vsc_title_bar_active_background")]
342 title_bar_active_background: String,
343 #[serde(rename = "vsc_title_bar_active_foreground")]
344 title_bar_active_foreground: String,
345 #[serde(rename = "vsc_title_bar_inactive_background")]
346 title_bar_inactive_background: String,
347 #[serde(rename = "vsc_title_bar_inactive_foreground")]
348 title_bar_inactive_foreground: String,
349 #[serde(rename = "vsc_extension_button_prominent_foreground")]
350 extension_button_prominent_foreground: String,
351 #[serde(rename = "vsc_extension_button_prominent_background")]
352 extension_button_prominent_background: String,
353 #[serde(rename = "vsc_extension_button_prominent_hover_background")]
354 extension_button_prominent_hover_background: String,
355 #[serde(rename = "vsc_picker_group_border")]
356 picker_group_border: String,
357 #[serde(rename = "vsc_picker_group_foreground")]
358 picker_group_foreground: String,
359 #[serde(rename = "vsc_debug_tool_bar_background")]
360 debug_tool_bar_background: String,
361 #[serde(rename = "vsc_walk_through_embedded_editor_background")]
362 walk_through_embedded_editor_background: String,
363 #[serde(rename = "vsc_settings_header_foreground")]
364 settings_header_foreground: String,
365 #[serde(rename = "vsc_settings_modified_item_indicator")]
366 settings_modified_item_indicator: String,
367 #[serde(rename = "vsc_settings_dropdown_background")]
368 settings_dropdown_background: String,
369 #[serde(rename = "vsc_settings_dropdown_foreground")]
370 settings_dropdown_foreground: String,
371 #[serde(rename = "vsc_settings_dropdown_border")]
372 settings_dropdown_border: String,
373 #[serde(rename = "vsc_settings_checkbox_background")]
374 settings_checkbox_background: String,
375 #[serde(rename = "vsc_settings_checkbox_foreground")]
376 settings_checkbox_foreground: String,
377 #[serde(rename = "vsc_settings_checkbox_border")]
378 settings_checkbox_border: String,
379 #[serde(rename = "vsc_settings_text_input_background")]
380 settings_text_input_background: String,
381 #[serde(rename = "vsc_settings_text_input_foreground")]
382 settings_text_input_foreground: String,
383 #[serde(rename = "vsc_settings_text_input_border")]
384 settings_text_input_border: String,
385 #[serde(rename = "vsc_settings_number_input_background")]
386 settings_number_input_background: String,
387 #[serde(rename = "vsc_settings_number_input_foreground")]
388 settings_number_input_foreground: String,
389 #[serde(rename = "vsc_settings_number_input_border")]
390 settings_number_input_border: String,
391 #[serde(rename = "vsc_breadcrumb_foreground")]
392 breadcrumb_foreground: String,
393 #[serde(rename = "vsc_breadcrumb_background")]
394 breadcrumb_background: String,
395 #[serde(rename = "vsc_breadcrumb_focus_foreground")]
396 breadcrumb_focus_foreground: String,
397 #[serde(rename = "vsc_breadcrumb_active_selection_foreground")]
398 breadcrumb_active_selection_foreground: String,
399 #[serde(rename = "vsc_breadcrumb_picker_background")]
400 breadcrumb_picker_background: String,
401 #[serde(rename = "vsc_list_filter_widget_background")]
402 list_filter_widget_background: String,
403 #[serde(rename = "vsc_list_filter_widget_outline")]
404 list_filter_widget_outline: String,
405 #[serde(rename = "vsc_list_filter_widget_no_matches_outline")]
406 list_filter_widget_no_matches_outline: String,
407}
408
409#[cfg(test)]
410mod tests {
411 use super::*;
412 use std::path::PathBuf;
413
414 #[test]
415 fn test_deserialize_dracula() {
416 let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
417 let root_dir = manifest_dir.parent().unwrap().parent().unwrap();
418
419 let mut d = root_dir.to_path_buf();
420 d.push("assets/themes/src/vsc/dracula/dracula.json");
421
422 let data = std::fs::read_to_string(d).expect("Unable to read file");
423
424 let result: Theme = serde_json::from_str(&data).unwrap();
425 println!("{:#?}", result);
426
427 // Uncomment the following lines to print specific fields
428 println!("Name: {:?}", result.name);
429 println!("Author: {:?}", result.author);
430 }
431}
432
433// use crate::ThemeColorsRefinement;
434
435// struct ImportedThemeFamily {
436// pub id: String,
437// pub name: String,
438// pub author: String,
439// pub url: String,
440// pub license: String,
441// pub themes: Vec<ImportedThemeVariant>,
442// }
443
444// struct ImportedThemeVariant {
445// pub id: String,
446// pub name: String,
447// pub colors: ThemeColorsRefinement,
448// }
449
450// pub fn try_vscode_colors_to_theme_colors(colors: VSCodeColors) -> ThemeColorsRefinement {
451// let mut theme_colors = ThemeColorsRefinement::default();
452
453// theme_colors
454// }
455
456// pub fn vscode_colors_to_theme_colors(color: String) -> ThemeColorsRefinement {
457// ThemeColorsRefinement {
458// text: Some(color),
459// ..Default::default()
460// }
461// }