@@ -1,9 +1,12 @@
-use gpui2::{hsla, Rgba};
+use std::num::ParseIntError;
+
+use gpui2::{hsla, Hsla, Rgba};
use crate::{
colors::{GitStatusColors, PlayerColor, PlayerColors, StatusColors, SystemColors, ThemeColors},
scale::{ColorScaleSet, ColorScales},
syntax::SyntaxTheme,
+ ColorScale,
};
fn neutral() -> ColorScaleSet {
@@ -265,31 +268,35 @@ impl ThemeColors {
}
}
-struct DefaultColorScaleSet {
+type StaticColorScale = [&'static str; 12];
+
+struct StaticColorScaleSet {
scale: &'static str,
- light: [&'static str; 12],
- light_alpha: [&'static str; 12],
- dark: [&'static str; 12],
- dark_alpha: [&'static str; 12],
+ light: StaticColorScale,
+ light_alpha: StaticColorScale,
+ dark: StaticColorScale,
+ dark_alpha: StaticColorScale,
}
-impl From<DefaultColorScaleSet> for ColorScaleSet {
- fn from(default: DefaultColorScaleSet) -> Self {
- Self::new(
- default.scale,
- default
- .light
- .map(|color| Rgba::try_from(color).unwrap().into()),
- default
- .light_alpha
- .map(|color| Rgba::try_from(color).unwrap().into()),
- default
- .dark
- .map(|color| Rgba::try_from(color).unwrap().into()),
- default
- .dark_alpha
- .map(|color| Rgba::try_from(color).unwrap().into()),
- )
+impl TryFrom<StaticColorScaleSet> for ColorScaleSet {
+ type Error = ParseIntError;
+
+ fn try_from(value: StaticColorScaleSet) -> Result<Self, Self::Error> {
+ fn to_color_scale(scale: StaticColorScale) -> Result<ColorScale, ParseIntError> {
+ scale
+ .into_iter()
+ .map(|color| Rgba::try_from(color).map(Hsla::from))
+ .collect::<Result<Vec<_>, _>>()
+ .map(ColorScale::from_iter)
+ }
+
+ Ok(Self::new(
+ value.scale,
+ to_color_scale(value.light)?,
+ to_color_scale(value.light_alpha)?,
+ to_color_scale(value.dark)?,
+ to_color_scale(value.dark_alpha)?,
+ ))
}
}
@@ -332,7 +339,7 @@ pub fn default_color_scales() -> ColorScales {
}
fn gray() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Gray",
light: [
"#fcfcfcff",
@@ -391,11 +398,12 @@ fn gray() -> ColorScaleSet {
"#ffffffed",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn mauve() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Mauve",
light: [
"#fdfcfdff",
@@ -454,11 +462,12 @@ fn mauve() -> ColorScaleSet {
"#fdfdffef",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn slate() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Slate",
light: [
"#fcfcfdff",
@@ -517,11 +526,12 @@ fn slate() -> ColorScaleSet {
"#fcfdffef",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn sage() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Sage",
light: [
"#fbfdfcff",
@@ -580,11 +590,12 @@ fn sage() -> ColorScaleSet {
"#fdfffeed",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn olive() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Olive",
light: [
"#fcfdfcff",
@@ -643,11 +654,12 @@ fn olive() -> ColorScaleSet {
"#fdfffded",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn sand() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Sand",
light: [
"#fdfdfcff",
@@ -706,11 +718,12 @@ fn sand() -> ColorScaleSet {
"#fffffded",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn gold() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Gold",
light: [
"#fdfdfcff",
@@ -769,11 +782,12 @@ fn gold() -> ColorScaleSet {
"#fef7ede7",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn bronze() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Bronze",
light: [
"#fdfcfcff",
@@ -832,11 +846,12 @@ fn bronze() -> ColorScaleSet {
"#fff1e9ec",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn brown() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Brown",
light: [
"#fefdfcff",
@@ -895,11 +910,12 @@ fn brown() -> ColorScaleSet {
"#feecd4f2",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn yellow() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Yellow",
light: [
"#fdfdf9ff",
@@ -958,11 +974,12 @@ fn yellow() -> ColorScaleSet {
"#fef6baf6",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn amber() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Amber",
light: [
"#fefdfbff",
@@ -1021,11 +1038,12 @@ fn amber() -> ColorScaleSet {
"#ffe7b3ff",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn orange() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Orange",
light: [
"#fefcfbff",
@@ -1084,11 +1102,12 @@ fn orange() -> ColorScaleSet {
"#ffe0c2ff",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn tomato() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Tomato",
light: [
"#fffcfcff",
@@ -1147,11 +1166,12 @@ fn tomato() -> ColorScaleSet {
"#ffd6cefb",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn red() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Red",
light: [
"#fffcfcff",
@@ -1210,11 +1230,12 @@ fn red() -> ColorScaleSet {
"#ffd1d9ff",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn ruby() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Ruby",
light: [
"#fffcfdff",
@@ -1273,11 +1294,12 @@ fn ruby() -> ColorScaleSet {
"#ffd3e2fe",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn crimson() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Crimson",
light: [
"#fffcfdff",
@@ -1336,11 +1358,12 @@ fn crimson() -> ColorScaleSet {
"#ffd5eafd",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn pink() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Pink",
light: [
"#fffcfeff",
@@ -1399,11 +1422,12 @@ fn pink() -> ColorScaleSet {
"#ffd3ecfd",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn plum() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Plum",
light: [
"#fefcffff",
@@ -1462,11 +1486,12 @@ fn plum() -> ColorScaleSet {
"#feddfef4",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn purple() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Purple",
light: [
"#fefcfeff",
@@ -1525,11 +1550,12 @@ fn purple() -> ColorScaleSet {
"#f1ddfffa",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn violet() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Violet",
light: [
"#fdfcfeff",
@@ -1588,11 +1614,12 @@ fn violet() -> ColorScaleSet {
"#e3defffe",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn iris() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Iris",
light: [
"#fdfdffff",
@@ -1651,11 +1678,12 @@ fn iris() -> ColorScaleSet {
"#e1e0fffe",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn indigo() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Indigo",
light: [
"#fdfdfeff",
@@ -1714,11 +1742,12 @@ fn indigo() -> ColorScaleSet {
"#d6e1ffff",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn blue() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Blue",
light: [
"#fbfdffff",
@@ -1777,11 +1806,12 @@ fn blue() -> ColorScaleSet {
"#c2e6ffff",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn cyan() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Cyan",
light: [
"#fafdfeff",
@@ -1840,11 +1870,12 @@ fn cyan() -> ColorScaleSet {
"#bbf3fef7",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn teal() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Teal",
light: [
"#fafefdff",
@@ -1903,11 +1934,12 @@ fn teal() -> ColorScaleSet {
"#b8ffebef",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn jade() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Jade",
light: [
"#fbfefdff",
@@ -1966,11 +1998,12 @@ fn jade() -> ColorScaleSet {
"#b8ffe1ef",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn green() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Green",
light: [
"#fbfefcff",
@@ -2029,11 +2062,12 @@ fn green() -> ColorScaleSet {
"#bbffd7f0",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn grass() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Grass",
light: [
"#fbfefbff",
@@ -2092,11 +2126,12 @@ fn grass() -> ColorScaleSet {
"#ceffceef",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn lime() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Lime",
light: [
"#fcfdfaff",
@@ -2155,11 +2190,12 @@ fn lime() -> ColorScaleSet {
"#e9febff7",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn mint() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Mint",
light: [
"#f9fefdff",
@@ -2218,11 +2254,12 @@ fn mint() -> ColorScaleSet {
"#cbfee9f5",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn sky() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Sky",
light: [
"#f9feffff",
@@ -2281,11 +2318,12 @@ fn sky() -> ColorScaleSet {
"#c2f3ffff",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn black() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "Black",
light: [
"#0000000d",
@@ -2344,11 +2382,12 @@ fn black() -> ColorScaleSet {
"#000000f2",
],
}
- .into()
+ .try_into()
+ .unwrap()
}
fn white() -> ColorScaleSet {
- DefaultColorScaleSet {
+ StaticColorScaleSet {
scale: "White",
light: [
"#ffffff0d",
@@ -2407,5 +2446,6 @@ fn white() -> ColorScaleSet {
"#fffffff2",
],
}
- .into()
+ .try_into()
+ .unwrap()
}