From 484f0b6780d29d703301f282b659d448305e2e55 Mon Sep 17 00:00:00 2001 From: Jesse Braham Date: Wed, 23 Oct 2024 10:44:35 +0200 Subject: [PATCH] Use `esp-metadata` rather than redefining the `Chip` enum --- Cargo.lock | 144 +++++++++++++++++++++++++++++++++++++++------------- Cargo.toml | 14 ++--- src/main.rs | 83 +++++++++--------------------- 3 files changed, 140 insertions(+), 101 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4c4377a..966a61f 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 = "ahash" @@ -71,11 +71,26 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "anyhow" +version = "1.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37bf3594c4c988a53154954629820791dde498571819ae4ca50ca811e060cc95" + [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "basic-toml" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "823388e228f614e9558c6804262db37960ec8821856535f5c3f59913140558f8" +dependencies = [ + "serde", +] [[package]] name = "bitflags" @@ -106,9 +121,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.5.18" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0956a43b323ac1afaffc053ed5c4b7c1f1800bacd1683c353aabbb752515dd3" +checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" dependencies = [ "clap_builder", "clap_derive", @@ -116,9 +131,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.18" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d72166dd41634086d5803a47eb71ae740e61d84709c36f3c34110173db3961b" +checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" dependencies = [ "anstream", "anstyle", @@ -221,6 +236,12 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "errno" version = "0.3.9" @@ -237,12 +258,32 @@ version = "0.1.0" dependencies = [ "clap", "crossterm", + "esp-metadata", "quote", "ratatui", "rhai", "walkdir", ] +[[package]] +name = "esp-metadata" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9972bbb21dcafe430b87f92efc7a788978a2d17cf8f572d104beeb48602482a" +dependencies = [ + "anyhow", + "basic-toml", + "clap", + "serde", + "strum", +] + +[[package]] +name = "foldhash" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" + [[package]] name = "getrandom" version = "0.2.15" @@ -256,12 +297,13 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" dependencies = [ - "ahash", "allocator-api2", + "equivalent", + "foldhash", ] [[package]] @@ -276,6 +318,12 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "indoc" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" + [[package]] name = "instability" version = "0.3.2" @@ -318,9 +366,9 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] name = "linux-raw-sys" @@ -346,9 +394,9 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lru" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ "hashbrown", ] @@ -377,9 +425,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "parking_lot" @@ -412,9 +460,9 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9" dependencies = [ "unicode-ident", ] @@ -430,30 +478,30 @@ dependencies = [ [[package]] name = "ratatui" -version = "0.28.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdef7f9be5c0122f890d58bdf4d964349ba6a6161f705907526d891efabba57d" +checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b" dependencies = [ "bitflags", "cassowary", "compact_str", "crossterm", + "indoc", "instability", "itertools", "lru", "paste", "strum", - "strum_macros", "unicode-segmentation", "unicode-truncate", - "unicode-width", + "unicode-width 0.2.0", ] [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ "bitflags", ] @@ -501,9 +549,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "ryu" @@ -526,6 +574,26 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "serde" +version = "1.0.211" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac55e59090389fb9f0dd9e0f3c09615afed1d19094284d0b200441f13550793" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.211" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54be4f245ce16bc58d57ef2716271d0d4519e0f6defa147f6e081005bcb278ff" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "signal-hook" version = "0.3.17" @@ -609,9 +677,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.76" +version = "2.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" +checksum = "83540f837a8afc019423a8edb95b52a8effe46957ee402287f4292fae35be021" dependencies = [ "proc-macro2", "quote", @@ -635,15 +703,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-truncate" @@ -653,14 +721,20 @@ checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" dependencies = [ "itertools", "unicode-segmentation", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "utf8parse" diff --git a/Cargo.toml b/Cargo.toml index e37abe2..76e7cf9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,15 +1,15 @@ [package] -name = "esp-generate" +name = "esp-generate" version = "0.1.0" edition = "2021" [dependencies] -clap = { version = "4.5.18", features = ["derive"] } - -ratatui = { version = "0.28.1", features = ["crossterm"] } -crossterm = { version = "0.28.1" } # Maybe this gives Windows issues like espflash? -rhai = "1.19.0" +clap = { version = "4.5.20", features = ["derive"] } +crossterm = { version = "0.28.1" } # Maybe this gives Windows issues like espflash? +esp-metadata = { version = "0.4.0", features = ["clap"] } +ratatui = { version = "0.29.0", features = ["crossterm"] } +rhai = "1.19.0" [build-dependencies] +quote = "1.0.37" walkdir = "2.5.0" -quote = "1.0.37" diff --git a/src/main.rs b/src/main.rs index 6d0a457..1665b44 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ use std::{env, path::PathBuf, process}; -use clap::{Parser, ValueEnum}; +use clap::Parser; +use esp_metadata::Chip; mod template_files; mod tui; @@ -42,10 +43,7 @@ impl GeneratorOptionItem { } fn is_category(&self) -> bool { - match self { - GeneratorOptionItem::Category(_) => true, - GeneratorOptionItem::Option(_) => false, - } + matches!(self, GeneratorOptionItem::Category(_)) } fn chips(&self) -> &'static [Chip] { @@ -71,11 +69,11 @@ static OPTIONS: &[GeneratorOptionItem] = &[ disables: &["ble"], chips: &[ Chip::Esp32, - Chip::Esp32S2, - Chip::Esp32S3, - Chip::Esp32C2, - Chip::Esp32C3, - Chip::Esp32C6, + Chip::Esp32c2, + Chip::Esp32c3, + Chip::Esp32c6, + Chip::Esp32s2, + Chip::Esp32s3, ], }), GeneratorOptionItem::Option(GeneratorOption { @@ -85,11 +83,11 @@ static OPTIONS: &[GeneratorOptionItem] = &[ disables: &["wifi"], chips: &[ Chip::Esp32, - Chip::Esp32S3, - Chip::Esp32C2, - Chip::Esp32C3, - Chip::Esp32C6, - Chip::Esp32H2, + Chip::Esp32c2, + Chip::Esp32c3, + Chip::Esp32c6, + Chip::Esp32h2, + Chip::Esp32s3, ], }), GeneratorOptionItem::Option(GeneratorOption { @@ -144,63 +142,26 @@ static OPTIONS: &[GeneratorOptionItem] = &[ static CHIP_VARS: &[(Chip, &[(&str, &str)])] = &[ (Chip::Esp32, &[("rust_target", "xtensa-esp32-none-elf")]), - (Chip::Esp32S2, &[("rust_target", "xtensa-esp32s2-none-elf")]), - (Chip::Esp32S3, &[("rust_target", "xtensa-esp32s3-none-elf")]), ( - Chip::Esp32C2, + Chip::Esp32c2, &[("rust_target", "riscv32imc-unknown-none-elf")], ), ( - Chip::Esp32C3, + Chip::Esp32c3, &[("rust_target", "riscv32imc-unknown-none-elf")], ), ( - Chip::Esp32C6, + Chip::Esp32c6, &[("rust_target", "riscv32imac-unknown-none-elf")], ), ( - Chip::Esp32H2, + Chip::Esp32h2, &[("rust_target", "riscv32imac-unknown-none-elf")], ), + (Chip::Esp32s2, &[("rust_target", "xtensa-esp32s2-none-elf")]), + (Chip::Esp32s3, &[("rust_target", "xtensa-esp32s3-none-elf")]), ]; -#[derive(Clone, Copy, Debug, PartialEq, ValueEnum)] -#[value(rename_all = "LOWER_CASE")] -pub enum Chip { - Esp32, - Esp32S2, - Esp32S3, - Esp32C2, - Esp32C3, - Esp32C6, - Esp32H2, -} - -impl std::fmt::Display for Chip { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - let chip = match self { - Chip::Esp32 => "esp32", - Chip::Esp32S2 => "esp32s2", - Chip::Esp32S3 => "esp32s3", - Chip::Esp32C2 => "esp32c2", - Chip::Esp32C3 => "esp32c3", - Chip::Esp32C6 => "esp32c6", - Chip::Esp32H2 => "esp32h2", - }; - write!(f, "{}", chip) - } -} - -impl Chip { - pub fn architecture_name(&self) -> String { - match self { - Chip::Esp32 | Chip::Esp32S2 | Chip::Esp32S3 => "xtensa", - _ => "riscv", - } - .to_string() - } -} - #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] struct Args { @@ -247,7 +208,11 @@ fn main() { args.option.clone() }; - selected.push(args.chip.architecture_name()); + selected.push(if args.chip.is_riscv() { + "riscv".to_string() + } else { + "xtensa".to_string() + }); let mut variables = vec![ ("project-name".to_string(), args.name.clone()),