import.rs

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