nonepad_vscodetheme/
lib.rs

1use std::{fmt, marker::PhantomData};
2
3#[rustfmt::skip]
4
5use serde::{de, Deserialize, Deserializer, Serialize};
6
7#[allow(dead_code)]
8#[derive(Serialize, Deserialize, Debug)]
9pub struct Colors {
10    #[serde(rename = "focusBorder")]
11    pub focus_border: String,
12    #[serde(rename = "foreground")]
13    pub foreground: String,
14    #[serde(rename = "selection.background")]
15    pub selection_background: String,
16    #[serde(rename = "widget.shadow")]
17    pub widget_shadow: String,
18    #[serde(rename = "textLink.activeForeground")]
19    pub text_link_active_foreground: String,
20    #[serde(rename = "textLink.foreground")]
21    pub text_link_foreground: String,
22    #[serde(rename = "textPreformat.foreground")]
23    pub text_preformat_foreground: String,
24    #[serde(rename = "button.background")]
25    pub button_background: String,
26    #[serde(rename = "button.foreground")]
27    pub button_foreground: String,
28    #[serde(rename = "button.hoverBackground")]
29    pub button_hover_background: String,
30    #[serde(rename = "dropdown.background")]
31    pub dropdown_background: String,
32    #[serde(rename = "dropdown.listBackground")]
33    pub dropdown_list_background: String,
34    #[serde(rename = "input.background")]
35    pub input_background: String,
36    #[serde(rename = "input.border")]
37    pub input_border: String,
38    #[serde(rename = "input.foreground")]
39    pub input_foreground: String,
40    #[serde(rename = "input.placeholderForeground")]
41    pub input_placeholder_foreground: String,
42    #[serde(rename = "scrollbar.shadow")]
43    pub scrollbar_shadow: String,
44    #[serde(rename = "scrollbarSlider.activeBackground")]
45    pub scrollbar_slider_active_background: String,
46    #[serde(rename = "scrollbarSlider.background")]
47    pub scrollbar_slider_background: String,
48    #[serde(rename = "scrollbarSlider.hoverBackground")]
49    pub scrollbar_slider_hover_background: String,
50    #[serde(rename = "badge.foreground")]
51    pub badge_foreground: String,
52    #[serde(rename = "badge.background")]
53    pub badge_background: String,
54    #[serde(rename = "progressBar.background")]
55    pub progress_bar_background: String,
56    #[serde(rename = "list.activeSelectionBackground")]
57    pub list_active_selection_background: String,
58    #[serde(rename = "list.activeSelectionForeground")]
59    pub list_active_selection_foreground: String,
60    #[serde(rename = "list.inactiveSelectionBackground")]
61    pub list_inactive_selection_background: String,
62    #[serde(rename = "list.inactiveSelectionForeground")]
63    pub list_inactive_selection_foreground: String,
64    #[serde(rename = "list.hoverForeground")]
65    pub list_hover_foreground: String,
66    #[serde(rename = "list.focusForeground")]
67    pub list_focus_foreground: String,
68    #[serde(rename = "list.focusBackground")]
69    pub list_focus_background: String,
70    #[serde(rename = "list.hoverBackground")]
71    pub list_hover_background: String,
72    #[serde(rename = "list.dropBackground")]
73    pub list_drop_background: String,
74    #[serde(rename = "list.highlightForeground")]
75    pub list_highlight_foreground: String,
76    #[serde(rename = "list.errorForeground")]
77    pub list_error_foreground: String,
78    #[serde(rename = "list.warningForeground")]
79    pub list_warning_foreground: String,
80    #[serde(rename = "activityBar.background")]
81    pub activity_bar_background: String,
82    #[serde(rename = "activityBar.dropBackground")]
83    pub activity_bar_drop_background: String,
84    #[serde(rename = "activityBar.foreground")]
85    pub activity_bar_foreground: String,
86    #[serde(rename = "activityBarBadge.background")]
87    pub activity_bar_badge_background: String,
88    #[serde(rename = "activityBarBadge.foreground")]
89    pub activity_bar_badge_foreground: String,
90    #[serde(rename = "sideBar.background")]
91    pub side_bar_background: String,
92    #[serde(rename = "sideBar.foreground")]
93    pub side_bar_foreground: String,
94    #[serde(rename = "sideBarSectionHeader.background")]
95    pub side_bar_section_header_background: String,
96    #[serde(rename = "sideBarSectionHeader.foreground")]
97    pub side_bar_section_header_foreground: String,
98    #[serde(rename = "sideBarTitle.foreground")]
99    pub side_bar_title_foreground: String,
100    #[serde(rename = "editorGroup.border")]
101    pub editor_group_border: String,
102    #[serde(rename = "editorGroup.dropBackground")]
103    pub editor_group_drop_background: String,
104    #[serde(rename = "editorGroupHeader.noTabsBackground")]
105    pub editor_group_header_no_tabs_background: String,
106    #[serde(rename = "editorGroupHeader.tabsBackground")]
107    pub editor_group_header_tabs_background: String,
108    #[serde(rename = "tab.activeBackground")]
109    pub tab_active_background: String,
110    #[serde(rename = "tab.activeForeground")]
111    pub tab_active_foreground: String,
112    #[serde(rename = "tab.border")]
113    pub tab_border: String,
114    #[serde(rename = "tab.activeBorder")]
115    pub tab_active_border: String,
116    #[serde(rename = "tab.unfocusedActiveBorder")]
117    pub tab_unfocused_active_border: String,
118    #[serde(rename = "tab.inactiveBackground")]
119    pub tab_inactive_background: String,
120    #[serde(rename = "tab.inactiveForeground")]
121    pub tab_inactive_foreground: String,
122    #[serde(rename = "tab.unfocusedActiveForeground")]
123    pub tab_unfocused_active_foreground: String,
124    #[serde(rename = "tab.unfocusedInactiveForeground")]
125    pub tab_unfocused_inactive_foreground: String,
126    #[serde(rename = "editor.background")]
127    pub editor_background: String,
128    #[serde(rename = "editor.foreground")]
129    pub editor_foreground: String,
130    #[serde(rename = "editor.hoverHighlightBackground")]
131    pub editor_hover_highlight_background: String,
132    #[serde(rename = "editor.findMatchBackground")]
133    pub editor_find_match_background: String,
134    #[serde(rename = "editor.findMatchHighlightBackground")]
135    pub editor_find_match_highlight_background: String,
136    #[serde(rename = "editor.findRangeHighlightBackground")]
137    pub editor_find_range_highlight_background: String,
138    #[serde(rename = "editor.lineHighlightBackground")]
139    pub editor_line_highlight_background: String,
140    #[serde(rename = "editor.lineHighlightBorder")]
141    pub editor_line_highlight_border: String,
142    #[serde(rename = "editor.inactiveSelectionBackground")]
143    pub editor_inactive_selection_background: String,
144    #[serde(rename = "editor.selectionBackground")]
145    pub editor_selection_background: String,
146    #[serde(rename = "editor.selectionHighlightBackground")]
147    pub editor_selection_highlight_background: String,
148    #[serde(rename = "editor.rangeHighlightBackground")]
149    pub editor_range_highlight_background: String,
150    #[serde(rename = "editor.wordHighlightBackground")]
151    pub editor_word_highlight_background: String,
152    #[serde(rename = "editor.wordHighlightStrongBackground")]
153    pub editor_word_highlight_strong_background: String,
154    #[serde(rename = "editorError.foreground")]
155    pub editor_error_foreground: String,
156    #[serde(rename = "editorError.border")]
157    pub editor_error_border: String,
158    #[serde(rename = "editorWarning.foreground")]
159    pub editor_warning_foreground: String,
160    #[serde(rename = "editorInfo.foreground")]
161    pub editor_info_foreground: String,
162    #[serde(rename = "editorWarning.border")]
163    pub editor_warning_border: String,
164    #[serde(rename = "editorCursor.foreground")]
165    pub editor_cursor_foreground: String,
166    #[serde(rename = "editorIndentGuide.background")]
167    pub editor_indent_guide_background: String,
168    #[serde(rename = "editorLineNumber.foreground")]
169    pub editor_line_number_foreground: String,
170    #[serde(rename = "editorWhitespace.foreground")]
171    pub editor_whitespace_foreground: String,
172    #[serde(rename = "editorOverviewRuler.border")]
173    pub editor_overview_ruler_border: String,
174    #[serde(rename = "editorOverviewRuler.currentContentForeground")]
175    pub editor_overview_ruler_current_content_foreground: String,
176    #[serde(rename = "editorOverviewRuler.incomingContentForeground")]
177    pub editor_overview_ruler_incoming_content_foreground: String,
178    #[serde(rename = "editorOverviewRuler.findMatchForeground")]
179    pub editor_overview_ruler_find_match_foreground: String,
180    #[serde(rename = "editorOverviewRuler.rangeHighlightForeground")]
181    pub editor_overview_ruler_range_highlight_foreground: String,
182    #[serde(rename = "editorOverviewRuler.selectionHighlightForeground")]
183    pub editor_overview_ruler_selection_highlight_foreground: String,
184    #[serde(rename = "editorOverviewRuler.wordHighlightForeground")]
185    pub editor_overview_ruler_word_highlight_foreground: String,
186    #[serde(rename = "editorOverviewRuler.wordHighlightStrongForeground")]
187    pub editor_overview_ruler_word_highlight_strong_foreground: String,
188    #[serde(rename = "editorOverviewRuler.modifiedForeground")]
189    pub editor_overview_ruler_modified_foregrund: String,
190    #[serde(rename = "editorOverviewRuler.addedForeground")]
191    pub editor_overview_ruler_added_foreground: String,
192    #[serde(rename = "editorOverviewRuler.deletedForeground")]
193    pub editor_overview_ruler_deleted_foreground: String,
194    #[serde(rename = "editorOverviewRuler.errorForeground")]
195    pub editor_overview_ruler_error_foreground: String,
196    #[serde(rename = "editorOverviewRuler.warningForeground")]
197    pub editor_overview_ruler_warning_foreground: String,
198    #[serde(rename = "editorOverviewRuler.infoForeground")]
199    pub editor_overview_ruler_info_foreground: String,
200    #[serde(rename = "editorOverviewRuler.bracketMatchForeground")]
201    pub editor_overview_ruler_bracket_match_foreground: String,
202    #[serde(rename = "editorGutter.modifiedBackground")]
203    pub editor_gutter_modified_background: String,
204    #[serde(rename = "editorGutter.addedBackground")]
205    pub editor_gutter_added_background: String,
206    #[serde(rename = "editorGutter.deletedBackground")]
207    pub editor_gutter_deleted_background: String,
208    #[serde(rename = "diffEditor.insertedTextBackground")]
209    pub diff_editor_inserted_text_background: String,
210    #[serde(rename = "diffEditor.removedTextBackground")]
211    pub diff_editor_removed_text_background: String,
212    #[serde(rename = "editorWidget.background")]
213    pub editor_widget_background: String,
214    #[serde(rename = "editorWidget.border")]
215    pub editor_widget_border: String,
216    #[serde(rename = "editorSuggestWidget.background")]
217    pub editor_suggest_widget_background: String,
218    #[serde(rename = "peekView.border")]
219    pub peek_view_border: String,
220    #[serde(rename = "peekViewEditor.matchHighlightBackground")]
221    pub peek_view_editor_match_highlight_background: String,
222    #[serde(rename = "peekViewEditorGutter.background")]
223    pub peek_view_editor_gutter_background: String,
224    #[serde(rename = "peekViewEditor.background")]
225    pub peek_view_editor_background: String,
226    #[serde(rename = "peekViewResult.background")]
227    pub peek_view_result_background: String,
228    #[serde(rename = "peekViewTitle.background")]
229    pub peek_view_title_background: String,
230    #[serde(rename = "merge.currentHeaderBackground")]
231    pub merge_current_header_background: String,
232    #[serde(rename = "merge.currentContentBackground")]
233    pub merge_current_content_background: String,
234    #[serde(rename = "merge.incomingHeaderBackground")]
235    pub merge_incoming_header_background: String,
236    #[serde(rename = "merge.incomingContentBackground")]
237    pub merge_incoming_content_background: String,
238    #[serde(rename = "panel.background")]
239    pub panel_background: String,
240    #[serde(rename = "panel.border")]
241    pub panel_border: String,
242    #[serde(rename = "panelTitle.activeBorder")]
243    pub panel_title_active_border: String,
244    #[serde(rename = "statusBar.background")]
245    pub status_bar_background: String,
246    #[serde(rename = "statusBar.debuggingBackground")]
247    pub status_bar_debugging_background: String,
248    #[serde(rename = "statusBar.debuggingForeground")]
249    pub status_bar_debugging_foreground: String,
250    #[serde(rename = "statusBar.noFolderForeground")]
251    pub status_bar_no_folder_foreground: String,
252    #[serde(rename = "statusBar.noFolderBackground")]
253    pub status_bar_no_folder_background: String,
254    #[serde(rename = "statusBar.foreground")]
255    pub status_bar_foreground: String,
256    #[serde(rename = "statusBarItem.activeBackground")]
257    pub status_bar_item_active_background: String,
258    #[serde(rename = "statusBarItem.hoverBackground")]
259    pub status_bar_item_hover_background: String,
260    #[serde(rename = "statusBarItem.prominentBackground")]
261    pub status_bar_item_prominent_background: String,
262    #[serde(rename = "statusBarItem.prominentHoverBackground")]
263    pub status_bar_item_prominent_hover_background: String,
264    #[serde(rename = "statusBar.border")]
265    pub status_bar_border: String,
266    #[serde(rename = "titleBar.activeBackground")]
267    pub title_bar_active_background: String,
268    #[serde(rename = "titleBar.activeForeground")]
269    pub title_bar_active_foreground: String,
270    #[serde(rename = "titleBar.inactiveBackground")]
271    pub title_bar_inactive_background: String,
272    #[serde(rename = "titleBar.inactiveForeground")]
273    pub title_bar_inactive_foreground: String,
274    #[serde(rename = "notificationCenterHeader.foreground")]
275    pub notification_center_header_foreground: String,
276    #[serde(rename = "notificationCenterHeader.background")]
277    pub notification_center_header_background: String,
278    #[serde(rename = "extensionButton.prominentForeground")]
279    pub extension_button_prominent_foreground: String,
280    #[serde(rename = "extensionButton.prominentBackground")]
281    pub extension_button_prominent_background: String,
282    #[serde(rename = "extensionButton.prominentHoverBackground")]
283    pub extension_button_prominent_hover_background: String,
284    #[serde(rename = "pickerGroup.border")]
285    pub picker_group_border: String,
286    #[serde(rename = "pickerGroup.foreground")]
287    pub picker_group_foreground: String,
288    #[serde(rename = "terminal.ansiBrightBlack")]
289    pub terminal_ansi_bright_black: String,
290    #[serde(rename = "terminal.ansiBlack")]
291    pub terminal_ansi_black: String,
292    #[serde(rename = "terminal.ansiBlue")]
293    pub terminal_ansi_blue: String,
294    #[serde(rename = "terminal.ansiBrightBlue")]
295    pub terminal_ansi_bright_blue: String,
296    #[serde(rename = "terminal.ansiBrightCyan")]
297    pub terminal_ansi_bright_cyan: String,
298    #[serde(rename = "terminal.ansiCyan")]
299    pub terminal_ansi_cyan: String,
300    #[serde(rename = "terminal.ansiBrightMagenta")]
301    pub terminal_ansi_bright_magenta: String,
302    #[serde(rename = "terminal.ansiMagenta")]
303    pub terminal_ansi_magenta: String,
304    #[serde(rename = "terminal.ansiBrightRed")]
305    pub terminal_ansi_bright_red: String,
306    #[serde(rename = "terminal.ansiRed")]
307    pub terminal_ansi_red: String,
308    #[serde(rename = "terminal.ansiYellow")]
309    pub terminal_ansi_yellow: String,
310    #[serde(rename = "terminal.ansiBrightYellow")]
311    pub terminal_ansi_bright_yellow: String,
312    #[serde(rename = "terminal.ansiBrightGreen")]
313    pub terminal_ansi_bright_green: String,
314    #[serde(rename = "terminal.ansiGreen")]
315    pub terminal_ansi_green: String,
316    #[serde(rename = "terminal.ansiWhite")]
317    pub terminal_ansi_white: String,
318    #[serde(rename = "terminal.selectionBackground")]
319    pub terminal_selection_background: String,
320    #[serde(rename = "terminalCursor.background")]
321    pub terminal_cursor_background: String,
322    #[serde(rename = "terminalCursor.foreground")]
323    pub terminal_cursor_foreground: String,
324    #[serde(rename = "gitDecoration.modifiedResourceForeground")]
325    pub git_decoration_modified_resource_foreground: String,
326    #[serde(rename = "gitDecoration.deletedResourceForeground")]
327    pub git_decoration_deleted_resource_foreground: String,
328    #[serde(rename = "gitDecoration.untrackedResourceForeground")]
329    pub git_decoration_untracked_resource_foreground: String,
330    #[serde(rename = "gitDecoration.conflictingResourceForeground")]
331    pub git_decoration_conflicting_resource_foreground: String,
332    #[serde(rename = "gitDecoration.submoduleResourceForeground")]
333    pub git_decoration_submodule_resource_foreground: String,
334}
335
336#[derive(Serialize, Deserialize, Debug)]
337pub struct TokenSetting {
338    pub foreground: Option<String>,
339    #[serde(rename = "fontStyle")]
340    pub font_style: Option<String>,
341}
342#[derive(Serialize, Deserialize, Debug)]
343pub struct TokenColors {
344    pub name: Option<String>,
345    #[serde(deserialize_with = "string_or_seq_string")]
346    pub scope: Vec<String>,
347    pub settings: TokenSetting,
348}
349
350#[derive(Serialize, Deserialize, Debug)]
351pub struct VSCodeTheme {
352    pub name: String,
353    #[serde(rename = "type")]
354    pub theme_type: String,
355    pub colors: Colors,
356    #[serde(rename = "tokenColors")]
357    pub token_colors: Vec<TokenColors>,
358}
359
360
361impl Default for VSCodeTheme {
362    fn default() -> Self {
363        let s = include_str!("themes/mariana.json");
364        serde_json::from_str(&s).unwrap()
365    }
366}
367
368fn string_or_seq_string<'de, D>(deserializer: D) -> Result<Vec<String>, D::Error>
369where
370    D: Deserializer<'de>,
371{
372    struct StringOrVec(PhantomData<Vec<String>>);
373
374    impl<'de> de::Visitor<'de> for StringOrVec {
375        type Value = Vec<String>;
376
377        fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
378            formatter.write_str("string or list of strings")
379        }
380
381        fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
382        where
383            E: de::Error,
384        {
385            Ok(vec![value.to_owned()])
386        }
387
388        fn visit_seq<S>(self, visitor: S) -> Result<Self::Value, S::Error>
389        where
390            S: de::SeqAccess<'de>,
391        {
392            Deserialize::deserialize(de::value::SeqAccessDeserializer::new(visitor))
393        }
394    }
395
396    deserializer.deserialize_any(StringOrVec(PhantomData))
397}