From 1a99af083740593f29f6b8de431a57707366f609 Mon Sep 17 00:00:00 2001 From: theMackabu <theMackabu@gmail.com> Date: Sun, 24 Nov 2024 21:19:52 -0800 Subject: [PATCH] add hcl support --- Cargo.lock | 139 ++++++++++++++++++-------------------- Cargo.toml | 8 +-- maid/client/parse/file.rs | 6 +- 3 files changed, 72 insertions(+), 81 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 09f1c77..171cadd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -912,6 +912,45 @@ version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" +[[package]] +name = "hcl-edit" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47a966f321ccf77cf6df2e600a3ebc8adb0b9d10acf3ed563fcf27efc69a7204" +dependencies = [ + "fnv", + "hcl-primitives", + "vecmap-rs", + "winnow", +] + +[[package]] +name = "hcl-primitives" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c48fcfd8788ffb4673ac4d3c914dfae15ceedc71d6c6975ab167f9da88a1f142" +dependencies = [ + "itoa", + "kstring", + "ryu", + "serde", + "unicode-ident", +] + +[[package]] +name = "hcl-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "048bb0eadcf99b53625333e7b40591309d13c35074961307c80cbf8d4729c76d" +dependencies = [ + "hcl-edit", + "hcl-primitives", + "indexmap 2.6.0", + "itoa", + "serde", + "vecmap-rs", +] + [[package]] name = "heck" version = "0.5.0" @@ -1330,17 +1369,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "json5" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" -dependencies = [ - "pest", - "pest_derive", - "serde", -] - [[package]] name = "kqueue" version = "1.0.8" @@ -1361,6 +1389,16 @@ dependencies = [ "libc", ] +[[package]] +name = "kstring" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "558bf9508a558512042d3095138b1f7b8fe90c5467d94f9f1da28b3731c5dbd1" +dependencies = [ + "serde", + "static_assertions", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -1451,11 +1489,11 @@ dependencies = [ "futures-core", "futures-util", "global_placeholders", + "hcl-rs", "home", "human_bytes", "indicatif", "inquire", - "json5", "lazy_static", "libc", "macros-rs", @@ -1750,51 +1788,6 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "pest" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" -dependencies = [ - "memchr", - "thiserror", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pest_meta" -version = "2.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" -dependencies = [ - "once_cell", - "pest", - "sha2", -] - [[package]] name = "pin-project" version = "1.1.7" @@ -2387,17 +2380,6 @@ dependencies = [ "digest", ] -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - [[package]] name = "sharded-slab" version = "0.1.7" @@ -2498,6 +2480,12 @@ dependencies = [ "loom", ] +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "strip-ansi-escapes" version = "0.2.0" @@ -2912,12 +2900,6 @@ dependencies = [ "serde", ] -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - [[package]] name = "uncased" version = "0.9.10" @@ -3021,6 +3003,15 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "vecmap-rs" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78fc839a22ab6c4e2f48cf5b935064188148258d467f49323134d503dd08294" +dependencies = [ + "serde", +] + [[package]] name = "version_check" version = "0.9.5" diff --git a/Cargo.toml b/Cargo.toml index 5251675..d0a1963 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,9 +26,9 @@ required-features = ["server"] default = ["client", "server"] client = [ - "dep:url", - "dep:toml", - "dep:json5", + "dep:url", + "dep:toml", + "dep:hcl-rs", "dep:notify", "dep:inquire", "dep:reqwest", @@ -92,8 +92,8 @@ tungstenite = { version = "0.20.1", features = ["rustls-tls-webpki-roots"] } # enable-feature = client url = { version = "2.5.3", optional = true } toml = { version = "0.8.19", optional = true } -json5 = { version = "0.4.1", optional = true } notify = { version = "6.1.1", optional = true } +hcl-rs = { version = "0.18.2", optional = true } inquire = { version = "0.6.2", optional = true } fs_extra = { version = "1.3.0", optional = true } env_logger = { version = "0.10.2", optional = true } diff --git a/maid/client/parse/file.rs b/maid/client/parse/file.rs index 8d9a9ea..49380a2 100644 --- a/maid/client/parse/file.rs +++ b/maid/client/parse/file.rs @@ -67,7 +67,7 @@ fn find_file(starting_directory: &Path, file_name: &String) -> Option<PathBuf> { }; loop { - for extension in vec!["", "toml", "yaml", "yml", "json", "json5"].iter() { + for extension in vec!["", "toml", "yaml", "yml", "json", "hcl"].iter() { let kind = find_kind(extension, path.clone()); then!(kind.is_file, return kind.path); } @@ -89,7 +89,7 @@ fn read_file(path: PathBuf, kind: &str) -> Maidfile { let result = match kind { "toml" => toml::from_str(&contents).map_err(|err| string!(err)), "json" => serde_json::from_str(&contents).map_err(|err| string!(err)), - "json5" => json5::from_str(&contents).map_err(|err| string!(err)), + "hcl" => hcl::from_str(&contents).map_err(|err| string!(err)), "yaml" | "yml" => serde_yaml::from_str(&contents).map_err(|err| string!(err)), _ => error!("Invalid format, cannot read Maidfile"), }; @@ -108,7 +108,7 @@ pub fn read_maidfile_with_error(filename: &String, error: &str) -> Maidfile { debug!(path = path.display().to_string(), kind = extension, "Found tasks"); match extension { - Some("yaml") | Some("yml") | Some("json") | Some("json5") => read_file(path.clone(), extension.unwrap()), + Some("yaml") | Some("yml") | Some("json") | Some("hcl") => read_file(path.clone(), extension.unwrap()), _ => read_file(path, "toml"), } } -- GitLab