Account for colors in VS Code theme being optional
This commit is contained in:
parent
e0382a61b9
commit
293fbe4c75
3 changed files with 125 additions and 44 deletions
|
@ -1,4 +1,5 @@
|
||||||
mod theme_printer;
|
mod theme_printer;
|
||||||
|
mod util;
|
||||||
mod vscode;
|
mod vscode;
|
||||||
|
|
||||||
use std::fs::{self, File};
|
use std::fs::{self, File};
|
||||||
|
|
11
crates/theme_importer/src/util.rs
Normal file
11
crates/theme_importer/src/util.rs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
use anyhow::Result;
|
||||||
|
|
||||||
|
pub trait Traverse<T, U> {
|
||||||
|
fn traverse(self, f: impl FnOnce(T) -> Result<U>) -> Result<Option<U>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T, U> Traverse<T, U> for Option<T> {
|
||||||
|
fn traverse(self, f: impl FnOnce(T) -> Result<U>) -> Result<Option<U>> {
|
||||||
|
self.map_or(Ok(None), |value| f(value).map(Some))
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ use theme::{
|
||||||
ThemeColors, ThemeColorsRefinement, ThemeStyles, ThemeVariant,
|
ThemeColors, ThemeColorsRefinement, ThemeStyles, ThemeVariant,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use crate::util::Traverse;
|
||||||
use crate::ThemeMetadata;
|
use crate::ThemeMetadata;
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
|
@ -443,50 +444,118 @@ impl VsCodeThemeConverter {
|
||||||
let vscode_colors = &self.theme.colors;
|
let vscode_colors = &self.theme.colors;
|
||||||
|
|
||||||
let theme_colors_refinements = ThemeColorsRefinement {
|
let theme_colors_refinements = ThemeColorsRefinement {
|
||||||
border: Some(try_parse_color(&vscode_colors.panel_border)?),
|
border: vscode_colors
|
||||||
border_variant: Some(try_parse_color(&vscode_colors.panel_border)?),
|
.panel_border
|
||||||
border_focused: Some(try_parse_color(&vscode_colors.panel_border)?),
|
.as_ref()
|
||||||
border_transparent: Some(try_parse_color(&vscode_colors.panel_border)?),
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
elevated_surface_background: Some(try_parse_color(&vscode_colors.panel_background)?),
|
border_variant: vscode_colors
|
||||||
surface_background: Some(try_parse_color(&vscode_colors.panel_background)?),
|
.panel_border
|
||||||
background: Some(try_parse_color(&vscode_colors.editor_background)?),
|
.as_ref()
|
||||||
element_background: Some(try_parse_color(&vscode_colors.button_background)?),
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
text: Some(try_parse_color(&vscode_colors.foreground)?),
|
border_focused: vscode_colors
|
||||||
tab_active_background: Some(try_parse_color(&vscode_colors.tab_active_background)?),
|
.panel_border
|
||||||
tab_inactive_background: Some(try_parse_color(&vscode_colors.tab_inactive_background)?),
|
.as_ref()
|
||||||
terminal_background: Some(try_parse_color(&vscode_colors.terminal_background)?),
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
terminal_ansi_bright_black: Some(try_parse_color(
|
border_transparent: vscode_colors
|
||||||
&vscode_colors.terminal_ansi_bright_black,
|
.panel_border
|
||||||
)?),
|
.as_ref()
|
||||||
terminal_ansi_bright_red: Some(try_parse_color(
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
&vscode_colors.terminal_ansi_bright_red,
|
elevated_surface_background: vscode_colors
|
||||||
)?),
|
.panel_background
|
||||||
terminal_ansi_bright_green: Some(try_parse_color(
|
.as_ref()
|
||||||
&vscode_colors.terminal_ansi_bright_green,
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
)?),
|
surface_background: vscode_colors
|
||||||
terminal_ansi_bright_yellow: Some(try_parse_color(
|
.panel_background
|
||||||
&vscode_colors.terminal_ansi_bright_yellow,
|
.as_ref()
|
||||||
)?),
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
terminal_ansi_bright_blue: Some(try_parse_color(
|
background: vscode_colors
|
||||||
&vscode_colors.terminal_ansi_bright_blue,
|
.editor_background
|
||||||
)?),
|
.as_ref()
|
||||||
terminal_ansi_bright_magenta: Some(try_parse_color(
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
&vscode_colors.terminal_ansi_bright_magenta,
|
element_background: vscode_colors
|
||||||
)?),
|
.button_background
|
||||||
terminal_ansi_bright_cyan: Some(try_parse_color(
|
.as_ref()
|
||||||
&vscode_colors.terminal_ansi_bright_cyan,
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
)?),
|
text: vscode_colors
|
||||||
terminal_ansi_bright_white: Some(try_parse_color(
|
.foreground
|
||||||
&vscode_colors.terminal_ansi_bright_white,
|
.as_ref()
|
||||||
)?),
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
terminal_ansi_black: Some(try_parse_color(&vscode_colors.terminal_ansi_black)?),
|
tab_active_background: vscode_colors
|
||||||
terminal_ansi_red: Some(try_parse_color(&vscode_colors.terminal_ansi_red)?),
|
.tab_active_background
|
||||||
terminal_ansi_green: Some(try_parse_color(&vscode_colors.terminal_ansi_green)?),
|
.as_ref()
|
||||||
terminal_ansi_yellow: Some(try_parse_color(&vscode_colors.terminal_ansi_yellow)?),
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
terminal_ansi_blue: Some(try_parse_color(&vscode_colors.terminal_ansi_blue)?),
|
tab_inactive_background: vscode_colors
|
||||||
terminal_ansi_magenta: Some(try_parse_color(&vscode_colors.terminal_ansi_magenta)?),
|
.tab_inactive_background
|
||||||
terminal_ansi_cyan: Some(try_parse_color(&vscode_colors.terminal_ansi_cyan)?),
|
.as_ref()
|
||||||
terminal_ansi_white: Some(try_parse_color(&vscode_colors.terminal_ansi_white)?),
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_background: vscode_colors
|
||||||
|
.terminal_background
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_bright_black: vscode_colors
|
||||||
|
.terminal_ansi_bright_black
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_bright_red: vscode_colors
|
||||||
|
.terminal_ansi_bright_red
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_bright_green: vscode_colors
|
||||||
|
.terminal_ansi_bright_green
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_bright_yellow: vscode_colors
|
||||||
|
.terminal_ansi_bright_yellow
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_bright_blue: vscode_colors
|
||||||
|
.terminal_ansi_bright_blue
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_bright_magenta: vscode_colors
|
||||||
|
.terminal_ansi_bright_magenta
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_bright_cyan: vscode_colors
|
||||||
|
.terminal_ansi_bright_cyan
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_bright_white: vscode_colors
|
||||||
|
.terminal_ansi_bright_white
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_black: vscode_colors
|
||||||
|
.terminal_ansi_black
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_red: vscode_colors
|
||||||
|
.terminal_ansi_red
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_green: vscode_colors
|
||||||
|
.terminal_ansi_green
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_yellow: vscode_colors
|
||||||
|
.terminal_ansi_yellow
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_blue: vscode_colors
|
||||||
|
.terminal_ansi_blue
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_magenta: vscode_colors
|
||||||
|
.terminal_ansi_magenta
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_cyan: vscode_colors
|
||||||
|
.terminal_ansi_cyan
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
|
terminal_ansi_white: vscode_colors
|
||||||
|
.terminal_ansi_white
|
||||||
|
.as_ref()
|
||||||
|
.traverse(|color| try_parse_color(&color))?,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue