theme_importer: Define more colors in `VsCodeTheme` (#6960)

Marshall Bowers created

This PR extends the `VsCodeTheme` struct with more of the colors
available on a VS Code theme.

Release Notes:

- N/A

Change summary

Cargo.lock                                    |   86 
crates/theme_importer/Cargo.toml              |    1 
crates/theme_importer/src/vscode/converter.rs |  126 
crates/theme_importer/src/vscode/theme.rs     | 1531 --------------------
4 files changed, 118 insertions(+), 1,626 deletions(-)

Detailed changes

Cargo.lock 🔗

@@ -493,7 +493,7 @@ checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -541,7 +541,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -585,7 +585,7 @@ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -854,7 +854,7 @@ dependencies = [
  "regex",
  "rustc-hash",
  "shlex",
- "syn 2.0.37",
+ "syn 2.0.48",
  "which",
 ]
 
@@ -1308,7 +1308,7 @@ dependencies = [
  "heck 0.4.1",
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -1950,7 +1950,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e"
 dependencies = [
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -2678,7 +2678,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -2880,7 +2880,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -3506,7 +3506,7 @@ checksum = "ce243b1bfa62ffc028f1cc3b6034ec63d649f3031bc8a4fbbb004e1ac17d1f68"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -3949,7 +3949,7 @@ checksum = "ba125974b109d512fccbc6c0244e7580143e460895dfd6ea7f8bbb692fd94396"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -4848,7 +4848,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -4914,7 +4914,7 @@ dependencies = [
  "proc-macro-error",
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -4963,7 +4963,7 @@ checksum = "b7db010ec5ff3d4385e4f133916faacd9dad0f6a09394c92d825b3aed310fa0a"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -5171,7 +5171,7 @@ dependencies = [
  "phf_shared",
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -5224,7 +5224,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -5428,7 +5428,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"
 dependencies = [
  "proc-macro2",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -5476,9 +5476,9 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.67"
+version = "1.0.78"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328"
+checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
 dependencies = [
  "unicode-ident",
 ]
@@ -5764,9 +5764,9 @@ dependencies = [
 
 [[package]]
 name = "quote"
-version = "1.0.33"
+version = "1.0.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
 dependencies = [
  "proc-macro2",
 ]
@@ -6310,7 +6310,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "rust-embed-utils",
- "syn 2.0.37",
+ "syn 2.0.48",
  "walkdir",
 ]
 
@@ -6595,7 +6595,7 @@ dependencies = [
  "proc-macro-error",
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -6636,7 +6636,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "sea-bae",
- "syn 2.0.37",
+ "syn 2.0.48",
  "unicode-ident",
 ]
 
@@ -6797,22 +6797,22 @@ checksum = "5a9f47faea3cad316faa914d013d24f471cd90bfca1a0c70f05a3f42c6441e99"
 
 [[package]]
 name = "serde"
-version = "1.0.188"
+version = "1.0.196"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
+checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.188"
+version = "1.0.196"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
+checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -6867,7 +6867,7 @@ checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -7537,7 +7537,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "rustversion",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -7664,9 +7664,9 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "2.0.37"
+version = "2.0.48"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -7891,6 +7891,7 @@ dependencies = [
  "strum",
  "theme",
  "uuid 1.4.1",
+ "vscode_theme",
 ]
 
 [[package]]
@@ -7932,7 +7933,7 @@ checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -8095,7 +8096,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -8289,7 +8290,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -9038,6 +9039,15 @@ dependencies = [
  "zed_actions",
 ]
 
+[[package]]
+name = "vscode_theme"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b3666211944f2e6ba2c359bc9efc1891157e910b1b11c3900892ea9f18179d2"
+dependencies = [
+ "serde",
+]
+
 [[package]]
 name = "vte"
 version = "0.13.0"
@@ -9120,7 +9130,7 @@ dependencies = [
  "once_cell",
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
  "wasm-bindgen-shared",
 ]
 
@@ -9154,7 +9164,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
@@ -9797,7 +9807,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.37",
+ "syn 2.0.48",
 ]
 
 [[package]]

crates/theme_importer/Cargo.toml 🔗

@@ -25,3 +25,4 @@ simplelog = "0.9"
 strum = { version = "0.25.0", features = ["derive"] }
 theme = { path = "../theme" }
 uuid.workspace = true
+vscode_theme = "0.2.0"

crates/theme_importer/src/vscode/converter.rs 🔗

@@ -74,31 +74,34 @@ impl VsCodeThemeConverter {
 
         Ok(StatusColorsContent {
             conflict: vscode_colors
-                .git_decoration_conflicting_resource_foreground
+                .git_decoration
+                .conflicting_resource_foreground
                 .clone(),
-            created: vscode_colors.editor_gutter_added_background.clone(),
-            deleted: vscode_colors.editor_gutter_deleted_background.clone(),
-            error: vscode_colors.editor_error_foreground.clone(),
-            error_background: vscode_colors.editor_error_background.clone(),
-            error_border: vscode_colors.editor_error_border.clone(),
-            hidden: vscode_colors.tab_inactive_foreground.clone(),
+            created: vscode_colors.editor_gutter.added_background.clone(),
+            deleted: vscode_colors.editor_gutter.deleted_background.clone(),
+            error: vscode_colors.editor_error.foreground.clone(),
+            error_background: vscode_colors.editor_error.background.clone(),
+            error_border: vscode_colors.editor_error.border.clone(),
+            hidden: vscode_colors.tab.inactive_foreground.clone(),
             hint: vscode_colors
-                .editor_inlay_hint_foreground
+                .editor_inlay_hint
+                .foreground
                 .clone()
                 .or(vscode_base_status_colors.hint),
-            hint_border: vscode_colors.editor_hint_border.clone(),
+            hint_border: vscode_colors.editor_hint.border.clone(),
             ignored: vscode_colors
-                .git_decoration_ignored_resource_foreground
+                .git_decoration
+                .ignored_resource_foreground
                 .clone(),
-            info: vscode_colors.editor_info_foreground.clone(),
-            info_background: vscode_colors.editor_info_background.clone(),
-            info_border: vscode_colors.editor_info_border.clone(),
-            modified: vscode_colors.editor_gutter_modified_background.clone(),
+            info: vscode_colors.editor_info.foreground.clone(),
+            info_background: vscode_colors.editor_info.background.clone(),
+            info_border: vscode_colors.editor_info.border.clone(),
+            modified: vscode_colors.editor_gutter.modified_background.clone(),
             // renamed: None,
             // success: None,
-            warning: vscode_colors.editor_warning_foreground.clone(),
-            warning_background: vscode_colors.editor_warning_background.clone(),
-            warning_border: vscode_colors.editor_warning_border.clone(),
+            warning: vscode_colors.editor_warning.foreground.clone(),
+            warning_background: vscode_colors.editor_warning.background.clone(),
+            warning_border: vscode_colors.editor_warning.border.clone(),
             ..Default::default()
         })
     }
@@ -106,11 +109,11 @@ impl VsCodeThemeConverter {
     fn convert_theme_colors(&self) -> Result<ThemeColorsContent> {
         let vscode_colors = &self.theme.colors;
 
-        let vscode_panel_border = vscode_colors.panel_border.clone();
-        let vscode_tab_inactive_background = vscode_colors.tab_inactive_background.clone();
-        let vscode_editor_foreground = vscode_colors.editor_foreground.clone();
-        let vscode_editor_background = vscode_colors.editor_background.clone();
-        let vscode_scrollbar_slider_background = vscode_colors.scrollbar_slider_background.clone();
+        let vscode_panel_border = vscode_colors.panel.border.clone();
+        let vscode_tab_inactive_background = vscode_colors.tab.inactive_background.clone();
+        let vscode_editor_foreground = vscode_colors.editor.foreground.clone();
+        let vscode_editor_background = vscode_colors.editor.background.clone();
+        let vscode_scrollbar_slider_background = vscode_colors.scrollbar_slider.background.clone();
         let vscode_token_colors_foreground = self
             .theme
             .token_colors
@@ -126,68 +129,71 @@ impl VsCodeThemeConverter {
             border_selected: vscode_panel_border.clone(),
             border_transparent: vscode_panel_border.clone(),
             border_disabled: vscode_panel_border.clone(),
-            elevated_surface_background: vscode_colors.dropdown_background.clone(),
-            surface_background: vscode_colors.panel_background.clone(),
+            elevated_surface_background: vscode_colors.dropdown.background.clone(),
+            surface_background: vscode_colors.panel.background.clone(),
             background: vscode_editor_background.clone(),
-            element_background: vscode_colors.button_background.clone(),
-            element_hover: vscode_colors.list_hover_background.clone(),
-            element_selected: vscode_colors.list_active_selection_background.clone(),
-            drop_target_background: vscode_colors.list_drop_background.clone(),
-            ghost_element_hover: vscode_colors.list_hover_background.clone(),
-            ghost_element_selected: vscode_colors.list_active_selection_background.clone(),
+            element_background: vscode_colors.button.background.clone(),
+            element_hover: vscode_colors.list.hover_background.clone(),
+            element_selected: vscode_colors.list.active_selection_background.clone(),
+            drop_target_background: vscode_colors.list.drop_background.clone(),
+            ghost_element_hover: vscode_colors.list.hover_background.clone(),
+            ghost_element_selected: vscode_colors.list.active_selection_background.clone(),
             text: vscode_colors
                 .foreground
                 .clone()
                 .or(vscode_token_colors_foreground.clone()),
-            text_muted: vscode_colors.tab_inactive_foreground.clone(),
-            status_bar_background: vscode_colors.status_bar_background.clone(),
-            title_bar_background: vscode_colors.title_bar_active_background.clone(),
+            text_muted: vscode_colors.tab.inactive_foreground.clone(),
+            status_bar_background: vscode_colors.status_bar.background.clone(),
+            title_bar_background: vscode_colors.title_bar.active_background.clone(),
             toolbar_background: vscode_colors
-                .breadcrumb_background
+                .breadcrumb
+                .background
                 .clone()
                 .or(vscode_editor_background.clone()),
-            tab_bar_background: vscode_colors.editor_group_header_tabs_background.clone(),
+            tab_bar_background: vscode_colors.editor_group_header.tabs_background.clone(),
             tab_inactive_background: vscode_tab_inactive_background.clone(),
             tab_active_background: vscode_colors
-                .tab_active_background
+                .tab
+                .active_background
                 .clone()
                 .or(vscode_tab_inactive_background.clone()),
-            panel_background: vscode_colors.panel_background.clone(),
+            panel_background: vscode_colors.panel.background.clone(),
             scrollbar_thumb_background: vscode_scrollbar_slider_background.clone(),
             scrollbar_thumb_hover_background: vscode_colors
-                .scrollbar_slider_hover_background
+                .scrollbar_slider
+                .hover_background
                 .clone(),
             scrollbar_thumb_border: vscode_scrollbar_slider_background.clone(),
             scrollbar_track_background: vscode_editor_background.clone(),
-            scrollbar_track_border: vscode_colors.editor_overview_ruler_border.clone(),
+            scrollbar_track_border: vscode_colors.editor_overview_ruler.border.clone(),
             editor_foreground: vscode_editor_foreground
                 .clone()
                 .or(vscode_token_colors_foreground.clone()),
             editor_background: vscode_editor_background.clone(),
             editor_gutter_background: vscode_editor_background.clone(),
-            editor_active_line_background: vscode_colors.editor_line_highlight_background.clone(),
-            editor_line_number: vscode_colors.editor_line_number_foreground.clone(),
-            editor_active_line_number: vscode_colors.editor_foreground.clone(),
+            editor_active_line_background: vscode_colors.editor.line_highlight_background.clone(),
+            editor_line_number: vscode_colors.editor_line_number.foreground.clone(),
+            editor_active_line_number: vscode_colors.editor.foreground.clone(),
             editor_wrap_guide: vscode_panel_border.clone(),
             editor_active_wrap_guide: vscode_panel_border.clone(),
-            terminal_background: vscode_colors.terminal_background.clone(),
-            terminal_ansi_black: vscode_colors.terminal_ansi_black.clone(),
-            terminal_ansi_bright_black: vscode_colors.terminal_ansi_bright_black.clone(),
-            terminal_ansi_red: vscode_colors.terminal_ansi_red.clone(),
-            terminal_ansi_bright_red: vscode_colors.terminal_ansi_bright_red.clone(),
-            terminal_ansi_green: vscode_colors.terminal_ansi_green.clone(),
-            terminal_ansi_bright_green: vscode_colors.terminal_ansi_bright_green.clone(),
-            terminal_ansi_yellow: vscode_colors.terminal_ansi_yellow.clone(),
-            terminal_ansi_bright_yellow: vscode_colors.terminal_ansi_bright_yellow.clone(),
-            terminal_ansi_blue: vscode_colors.terminal_ansi_blue.clone(),
-            terminal_ansi_bright_blue: vscode_colors.terminal_ansi_bright_blue.clone(),
-            terminal_ansi_magenta: vscode_colors.terminal_ansi_magenta.clone(),
-            terminal_ansi_bright_magenta: vscode_colors.terminal_ansi_bright_magenta.clone(),
-            terminal_ansi_cyan: vscode_colors.terminal_ansi_cyan.clone(),
-            terminal_ansi_bright_cyan: vscode_colors.terminal_ansi_bright_cyan.clone(),
-            terminal_ansi_white: vscode_colors.terminal_ansi_white.clone(),
-            terminal_ansi_bright_white: vscode_colors.terminal_ansi_bright_white.clone(),
-            link_text_hover: vscode_colors.text_link_active_foreground.clone(),
+            terminal_background: vscode_colors.terminal.background.clone(),
+            terminal_ansi_black: vscode_colors.terminal.ansi_black.clone(),
+            terminal_ansi_bright_black: vscode_colors.terminal.ansi_bright_black.clone(),
+            terminal_ansi_red: vscode_colors.terminal.ansi_red.clone(),
+            terminal_ansi_bright_red: vscode_colors.terminal.ansi_bright_red.clone(),
+            terminal_ansi_green: vscode_colors.terminal.ansi_green.clone(),
+            terminal_ansi_bright_green: vscode_colors.terminal.ansi_bright_green.clone(),
+            terminal_ansi_yellow: vscode_colors.terminal.ansi_yellow.clone(),
+            terminal_ansi_bright_yellow: vscode_colors.terminal.ansi_bright_yellow.clone(),
+            terminal_ansi_blue: vscode_colors.terminal.ansi_blue.clone(),
+            terminal_ansi_bright_blue: vscode_colors.terminal.ansi_bright_blue.clone(),
+            terminal_ansi_magenta: vscode_colors.terminal.ansi_magenta.clone(),
+            terminal_ansi_bright_magenta: vscode_colors.terminal.ansi_bright_magenta.clone(),
+            terminal_ansi_cyan: vscode_colors.terminal.ansi_cyan.clone(),
+            terminal_ansi_bright_cyan: vscode_colors.terminal.ansi_bright_cyan.clone(),
+            terminal_ansi_white: vscode_colors.terminal.ansi_white.clone(),
+            terminal_ansi_bright_white: vscode_colors.terminal.ansi_bright_white.clone(),
+            link_text_hover: vscode_colors.text_link.active_foreground.clone(),
             ..Default::default()
         })
     }

crates/theme_importer/src/vscode/theme.rs 🔗

@@ -1,15 +1,8 @@
-use serde::{Deserialize, Deserializer};
+use serde::Deserialize;
+use vscode_theme::Colors;
 
 use crate::vscode::VsCodeTokenColor;
 
-fn empty_string_as_none<'de, D>(deserializer: D) -> Result<Option<String>, D::Error>
-where
-    D: Deserializer<'de>,
-{
-    let value = Option::<String>::deserialize(deserializer)?;
-    Ok(value.filter(|value| !value.is_empty()))
-}
-
 #[derive(Deserialize, Debug)]
 pub struct VsCodeTheme {
     #[serde(rename = "$schema")]
@@ -21,1525 +14,7 @@ pub struct VsCodeTheme {
     pub semantic_class: Option<String>,
     #[serde(rename = "semanticHighlighting")]
     pub semantic_highlighting: Option<bool>,
-    pub colors: VsCodeColors,
+    pub colors: Colors,
     #[serde(rename = "tokenColors")]
     pub token_colors: Vec<VsCodeTokenColor>,
 }
-
-#[derive(Debug, Deserialize)]
-pub struct VsCodeColors {
-    #[serde(
-        default,
-        rename = "terminal.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiBrightBlack",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_bright_black: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiBrightRed",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_bright_red: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiBrightGreen",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_bright_green: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiBrightYellow",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_bright_yellow: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiBrightBlue",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_bright_blue: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiBrightMagenta",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_bright_magenta: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiBrightCyan",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_bright_cyan: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiBrightWhite",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_bright_white: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiBlack",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_black: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiRed",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_red: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiGreen",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_green: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiYellow",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_yellow: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiBlue",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_blue: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiMagenta",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_magenta: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiCyan",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_cyan: Option<String>,
-
-    #[serde(
-        default,
-        rename = "terminal.ansiWhite",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub terminal_ansi_white: Option<String>,
-
-    #[serde(
-        default,
-        rename = "textLink.activeForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub text_link_active_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "focusBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub focus_border: Option<String>,
-
-    #[serde(default, deserialize_with = "empty_string_as_none")]
-    pub foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "selection.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub selection_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "errorForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub error_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "button.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub button_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "button.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub button_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "button.secondaryBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub button_secondary_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "button.secondaryForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub button_secondary_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "button.secondaryHoverBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub button_secondary_hover_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "dropdown.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub dropdown_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "dropdown.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub dropdown_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "dropdown.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub dropdown_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "input.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub input_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "input.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub input_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "input.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub input_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "input.placeholderForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub input_placeholder_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "inputOption.activeBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub input_option_active_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "inputValidation.infoBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub input_validation_info_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "inputValidation.warningBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub input_validation_warning_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "inputValidation.errorBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub input_validation_error_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "badge.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub badge_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "badge.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub badge_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "progressBar.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub progress_bar_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "list.activeSelectionBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub list_active_selection_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "list.activeSelectionForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub list_active_selection_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "list.dropBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub list_drop_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "list.focusBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub list_focus_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "list.highlightForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub list_highlight_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "list.hoverBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub list_hover_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "list.inactiveSelectionBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub list_inactive_selection_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "list.warningForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub list_warning_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "list.errorForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub list_error_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "activityBar.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub activity_bar_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "activityBar.inactiveForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub activity_bar_inactive_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "activityBar.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub activity_bar_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "activityBar.activeBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub activity_bar_active_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "activityBar.activeBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub activity_bar_active_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "activityBarBadge.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub activity_bar_badge_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "activityBarBadge.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub activity_bar_badge_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "sideBar.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub side_bar_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "sideBarTitle.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub side_bar_title_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "sideBarSectionHeader.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub side_bar_section_header_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "sideBarSectionHeader.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub side_bar_section_header_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorGroup.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_group_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorGroup.dropBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_group_drop_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorGroupHeader.tabsBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_group_header_tabs_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "tab.activeBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub tab_active_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "tab.activeForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub tab_active_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "tab.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub tab_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "tab.activeBorderTop",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub tab_active_border_top: Option<String>,
-
-    #[serde(
-        default,
-        rename = "tab.inactiveBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub tab_inactive_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "tab.inactiveForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub tab_inactive_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorInlayHint.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_inlay_hint_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorInlayHint.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_inlay_hint_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorInlayHint.parameterForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_inlay_hint_parameter_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorInlayHint.parameterBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_inlay_hint_parameter_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorInlayHint.typForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_inlay_hint_typ_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorInlayHint.typBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_inlay_hint_typ_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorLineNumber.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_line_number_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.selectionBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_selection_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.selectionHighlightBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_selection_highlight_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.foldBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_fold_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.wordHighlightBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_word_highlight_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.wordHighlightStrongBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_word_highlight_strong_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.findMatchBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_find_match_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.findMatchHighlightBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_find_match_highlight_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.findRangeHighlightBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_find_range_highlight_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.hoverHighlightBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_hover_highlight_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.lineHighlightBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_line_highlight_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.lineHighlightBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_line_highlight_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorLink.activeForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_link_active_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.rangeHighlightBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_range_highlight_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.snippetTabstopHighlightBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_snippet_tabstop_highlight_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.snippetTabstopHighlightBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_snippet_tabstop_highlight_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.snippetFinalTabstopHighlightBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_snippet_final_tabstop_highlight_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editor.snippetFinalTabstopHighlightBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_snippet_final_tabstop_highlight_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorWhitespace.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_whitespace_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorIndentGuide.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_indent_guide_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorIndentGuide.activeBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_indent_guide_active_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorRuler.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_ruler_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorCodeLens.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_code_lens_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorBracketHighlight.foreground1",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_bracket_highlight_foreground1: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorBracketHighlight.foreground2",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_bracket_highlight_foreground2: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorBracketHighlight.foreground3",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_bracket_highlight_foreground3: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorBracketHighlight.foreground4",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_bracket_highlight_foreground4: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorBracketHighlight.foreground5",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_bracket_highlight_foreground5: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorBracketHighlight.foreground6",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_bracket_highlight_foreground6: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorBracketHighlight.unexpectedBracket.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_bracket_highlight_unexpected_bracket_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorOverviewRuler.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_overview_ruler_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorOverviewRuler.selectionHighlightForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_overview_ruler_selection_highlight_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorOverviewRuler.wordHighlightForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_overview_ruler_word_highlight_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorOverviewRuler.wordHighlightStrongForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_overview_ruler_word_highlight_strong_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorOverviewRuler.modifiedForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_overview_ruler_modified_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorOverviewRuler.addedForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_overview_ruler_added_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorOverviewRuler.deletedForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_overview_ruler_deleted_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorOverviewRuler.errorForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_overview_ruler_error_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorOverviewRuler.warningForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_overview_ruler_warning_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorOverviewRuler.infoForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_overview_ruler_info_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorError.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_error_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorError.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_error_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorError.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_error_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorWarning.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_warning_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorWarning.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_warning_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorWarning.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_warning_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorInfo.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_info_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorInfo.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_info_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorInfo.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_info_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorHint.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_hint_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorHint.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_hint_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorGutter.modifiedBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_gutter_modified_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorGutter.addedBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_gutter_added_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorGutter.deletedBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_gutter_deleted_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "gitDecoration.modifiedResourceForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub git_decoration_modified_resource_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "gitDecoration.deletedResourceForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub git_decoration_deleted_resource_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "gitDecoration.untrackedResourceForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub git_decoration_untracked_resource_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "gitDecoration.ignoredResourceForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub git_decoration_ignored_resource_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "gitDecoration.conflictingResourceForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub git_decoration_conflicting_resource_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "diffEditor.insertedTextBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub diff_editor_inserted_text_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "diffEditor.removedTextBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub diff_editor_removed_text_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "inlineChat.regionHighlight",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub inline_chat_region_highlight: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorWidget.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_widget_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorSuggestWidget.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_suggest_widget_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorSuggestWidget.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_suggest_widget_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorSuggestWidget.selectedBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_suggest_widget_selected_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorHoverWidget.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_hover_widget_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorHoverWidget.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_hover_widget_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorMarkerNavigation.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_marker_navigation_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "peekView.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub peek_view_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "peekViewEditor.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub peek_view_editor_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "peekViewEditor.matchHighlightBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub peek_view_editor_match_highlight_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "peekViewResult.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub peek_view_result_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "peekViewResult.fileForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub peek_view_result_file_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "peekViewResult.lineForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub peek_view_result_line_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "peekViewResult.matchHighlightBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub peek_view_result_match_highlight_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "peekViewResult.selectionBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub peek_view_result_selection_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "peekViewResult.selectionForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub peek_view_result_selection_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "peekViewTitle.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub peek_view_title_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "peekViewTitleDescription.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub peek_view_title_description_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "peekViewTitleLabel.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub peek_view_title_label_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "merge.currentHeaderBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub merge_current_header_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "merge.incomingHeaderBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub merge_incoming_header_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorOverviewRuler.currentContentForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_overview_ruler_current_content_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "editorOverviewRuler.incomingContentForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub editor_overview_ruler_incoming_content_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "panel.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub panel_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "panel.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub panel_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "panelTitle.activeBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub panel_title_active_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "panelTitle.activeForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub panel_title_active_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "panelTitle.inactiveForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub panel_title_inactive_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "scrollbar.shadow",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub scrollbar_shadow: Option<String>,
-
-    #[serde(
-        default,
-        rename = "scrollbarSlider.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub scrollbar_slider_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "scrollbarSlider.activeBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub scrollbar_slider_active_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "scrollbarSlider.hoverBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub scrollbar_slider_hover_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "statusBar.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub status_bar_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "statusBar.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub status_bar_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "statusBar.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub status_bar_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "statusBar.debuggingBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub status_bar_debugging_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "statusBar.debuggingForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub status_bar_debugging_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "statusBar.noFolderBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub status_bar_no_folder_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "statusBar.noFolderForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub status_bar_no_folder_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "statusBarItem.prominentBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub status_bar_item_prominent_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "statusBarItem.prominentHoverBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub status_bar_item_prominent_hover_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "statusBarItem.remoteForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub status_bar_item_remote_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "statusBarItem.remoteBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub status_bar_item_remote_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "titleBar.activeBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub title_bar_active_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "titleBar.activeForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub title_bar_active_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "titleBar.inactiveBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub title_bar_inactive_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "titleBar.inactiveForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub title_bar_inactive_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "extensionButton.prominentForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub extension_button_prominent_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "extensionButton.prominentBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub extension_button_prominent_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "extensionButton.prominentHoverBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub extension_button_prominent_hover_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "pickerGroup.border",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub picker_group_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "pickerGroup.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub picker_group_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "debugToolBar.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub debug_tool_bar_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "walkThrough.embeddedEditorBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub walk_through_embedded_editor_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.headerForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_header_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.modifiedItemIndicator",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_modified_item_indicator: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.dropdownBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_dropdown_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.dropdownForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_dropdown_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.dropdownBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_dropdown_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.checkboxBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_checkbox_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.checkboxForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_checkbox_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.checkboxBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_checkbox_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.textInputBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_text_input_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.textInputForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_text_input_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.textInputBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_text_input_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.numberInputBackground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_number_input_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.numberInputForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_number_input_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "settings.numberInputBorder",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub settings_number_input_border: Option<String>,
-
-    #[serde(
-        default,
-        rename = "breadcrumb.foreground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub breadcrumb_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "breadcrumb.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub breadcrumb_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "breadcrumb.focusForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub breadcrumb_focus_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "breadcrumb.activeSelectionForeground",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub breadcrumb_active_selection_foreground: Option<String>,
-
-    #[serde(
-        default,
-        rename = "breadcrumbPicker.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub breadcrumb_picker_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "listFilterWidget.background",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub list_filter_widget_background: Option<String>,
-
-    #[serde(
-        default,
-        rename = "listFilterWidget.outline",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub list_filter_widget_outline: Option<String>,
-
-    #[serde(
-        default,
-        rename = "listFilterWidget.noMatchesOutline",
-        deserialize_with = "empty_string_as_none"
-    )]
-    pub list_filter_widget_no_matches_outline: Option<String>,
-}