diff --git a/Cargo.lock b/Cargo.lock index 4f1e10d..9f68be8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "aho-corasick" @@ -77,9 +77,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.89" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" +checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" [[package]] name = "assert_cmd" @@ -149,14 +149,18 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "catppuccin" -version = "2.4.0" +version = "2.5.0-beta.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa1798ea21d5f88f057b9a4d075bbf3e9cc4bba98da0d6197a2019f61f633bf4" +checksum = "4b7512a670a9ac308941da5c38b3afe0549d3395131c58c1a4f7970904890000" dependencies = [ "css-colors", "itertools", + "prettyplease", + "proc-macro2", + "quote", "serde", "serde_json", + "syn", ] [[package]] @@ -183,7 +187,7 @@ dependencies = [ "serde_yaml", "tempfile", "tera", - "thiserror", + "thiserror 2.0.4", ] [[package]] @@ -234,9 +238,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.20" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ "clap_builder", "clap_derive", @@ -248,14 +252,14 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "471df7896633bfc1e7d3da5b598422891e4cb8931210168ec63ea586e285803f" dependencies = [ - "thiserror", + "thiserror 1.0.64", ] [[package]] name = "clap_builder" -version = "4.5.20" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ "anstream", "anstyle", @@ -277,9 +281,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "colorchoice" @@ -542,9 +546,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", "hashbrown", @@ -589,9 +593,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.159" +version = "0.2.167" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" +checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" [[package]] name = "libm" @@ -675,7 +679,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" dependencies = [ "memchr", - "thiserror", + "thiserror 1.0.64", "ucd-trie", ] @@ -787,6 +791,16 @@ dependencies = [ "termtree", ] +[[package]] +name = "prettyplease" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro2" version = "1.0.85" @@ -888,9 +902,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.37" +version = "0.38.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" dependencies = [ "bitflags", "errno", @@ -925,18 +939,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.210" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.210" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", @@ -945,9 +959,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "indexmap", "itoa", @@ -1004,9 +1018,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.66" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -1015,9 +1029,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", "fastrand", @@ -1060,7 +1074,16 @@ version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.64", +] + +[[package]] +name = "thiserror" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f49a1853cf82743e3b7950f77e0f4d622ca36cf4317cba00c767838bac8d490" +dependencies = [ + "thiserror-impl 2.0.4", ] [[package]] @@ -1074,6 +1097,17 @@ dependencies = [ "syn", ] +[[package]] +name = "thiserror-impl" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8381894bb3efe0c4acac3ded651301ceee58a15d47c2e34885ed1908ad667061" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "typenum" version = "1.17.0" diff --git a/Cargo.toml b/Cargo.toml index 89fe687..a6e2c39 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,25 +37,25 @@ cast_possible_truncation = "allow" cast_sign_loss = "allow" [dependencies] -anyhow = "1.0.86" +anyhow = "1.0.94" base64 = "0.22.1" -catppuccin = { version = "2.4.0", features = ["serde", "css-colors"] } -clap = { version = "4.5.4", features = ["derive"] } +catppuccin = { version = "2.5.0-beta.0", features = ["serde", "css-colors"] } +clap = { version = "4.5.23", features = ["derive"] } clap-stdin = "0.5.0" css-colors = "1.0.1" detect-newline-style = "0.1.2" encoding_rs_io = "0.1.7" -indexmap = { version = "2.2.6", features = ["serde"] } +indexmap = { version = "2.7.0", features = ["serde"] } itertools = "0.13.0" lzma-rust = "0.1.6" rmp-serde = "1.3.0" semver = { version = "1.0.23", features = ["serde"] } -serde = { version = "1.0.202", features = ["derive"] } -serde_json = "1.0.117" +serde = { version = "1.0.215", features = ["derive"] } +serde_json = "1.0.133" serde_yaml = "0.9.34" -tempfile = "3.10.1" +tempfile = "3.14.0" tera = { version = "1.19.1", features = ["preserve_order"] } -thiserror = "1.0.61" +thiserror = "2.0.4" [dev-dependencies] assert_cmd = "2.0.14" diff --git a/src/context.rs b/src/context.rs index 8ab9e35..a39e484 100644 --- a/src/context.rs +++ b/src/context.rs @@ -26,7 +26,7 @@ mod tests { #[test] fn test_merge_values() { - let a = tera::to_value(&json!({ + let a = tera::to_value(json!({ "a": 1, "b": { "c": 2, @@ -34,7 +34,7 @@ mod tests { }, })) .expect("test value is always valid"); - let b = tera::to_value(&json!({ + let b = tera::to_value(json!({ "b": { "c": 4, "e": 5, @@ -45,7 +45,7 @@ mod tests { let result = merge_values(&a, &b); assert_eq!( result, - tera::to_value(&json!({ + tera::to_value(json!({ "a": 1, "b": { "c": 4, diff --git a/src/models.rs b/src/models.rs index e4df945..5f34ba3 100644 --- a/src/models.rs +++ b/src/models.rs @@ -23,6 +23,7 @@ pub struct Flavor { pub dark: bool, pub light: bool, pub colors: IndexMap, + pub ansi_colors: IndexMap, } #[derive(serde::Serialize, serde::Deserialize, Debug, Clone)] @@ -40,6 +41,19 @@ pub struct Color { pub opacity: u8, } +#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)] +pub struct AnsiColor { + pub name: String, + pub identifier: String, + pub code: u8, + pub hex: String, + pub int24: u32, + pub uint32: u32, + pub sint32: i32, + pub rgb: RGB, + pub hsl: HSL, +} + #[derive(serde::Serialize, serde::Deserialize, Debug, Clone)] pub struct RGB { pub r: u8, @@ -160,11 +174,7 @@ fn color_from_catppuccin(color: &catppuccin::Color) -> tera::Result { int24, uint32, sint32, - rgb: RGB { - r: color.rgb.r, - g: color.rgb.g, - b: color.rgb.b, - }, + rgb, hsl: HSL { h: color.hsl.h.round() as u16, s: color.hsl.s as f32, @@ -174,6 +184,27 @@ fn color_from_catppuccin(color: &catppuccin::Color) -> tera::Result { }) } +fn ansi_color_from_catppuccin(ansi_color: &catppuccin::AnsiColor) -> tera::Result { + let hex = format_hex!(ansi_color.rgb.r, ansi_color.rgb.g, ansi_color.rgb.b, 0xFF)?; + let rgb: RGB = ansi_color.rgb.into(); + let (int24, uint32, sint32) = rgb_to_ints(&rgb, None); + Ok(AnsiColor { + name: ansi_color.name.to_string(), + identifier: ansi_color.name.identifier().to_string(), + code: ansi_color.code, + hex, + int24, + uint32, + sint32, + rgb, + hsl: HSL { + h: ansi_color.hsl.h.round() as u16, + s: ansi_color.hsl.s as f32, + l: ansi_color.hsl.l as f32, + }, + }) +} + /// Build a [`Palette`] from [`catppuccin::PALETTE`], optionally applying color overrides. pub fn build_palette(color_overrides: Option<&ColorOverrides>) -> Result { // make a `Color` from a `catppuccin::Color`, taking into account `color_overrides`. @@ -207,12 +238,21 @@ pub fn build_palette(color_overrides: Option<&ColorOverrides>) -> Result) -> Result