From a500c8d9d603fe8efab5fdf458475a35c8fd08e9 Mon Sep 17 00:00:00 2001 From: Vincent Prouillet Date: Tue, 1 Aug 2023 22:52:29 +0200 Subject: [PATCH 1/5] Update clap and edition --- Cargo.lock | 855 ++++++++++++++++++++++++++++++++----------- Cargo.toml | 8 +- src/bin/kickstart.rs | 124 +++---- src/definition.rs | 13 +- src/generation.rs | 6 +- src/utils.rs | 5 +- 6 files changed, 704 insertions(+), 307 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a48018a..bbfe3c9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,86 +4,125 @@ version = 3 [[package]] name = "aho-corasick" -version = "0.7.18" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" dependencies = [ "memchr", ] [[package]] -name = "ansi_term" -version = "0.11.0" +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "winapi", + "libc", ] [[package]] -name = "atty" -version = "0.2.14" +name = "anstream" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" dependencies = [ - "hermit-abi", - "libc", - "winapi", + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is-terminal", + "utf8parse", ] [[package]] -name = "autocfg" +name = "anstyle" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" [[package]] -name = "bitflags" -version = "1.2.1" +name = "anstyle-parse" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +dependencies = [ + "utf8parse", +] [[package]] -name = "block-buffer" -version = "0.7.3" +name = "anstyle-query" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" dependencies = [ - "block-padding", - "byte-tools", - "byteorder", - "generic-array", + "windows-sys", ] [[package]] -name = "block-padding" -version = "0.1.5" +name = "anstyle-wincon" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +dependencies = [ + "anstyle", + "windows-sys", +] + +[[package]] +name = "autocfg" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "byte-tools", + "generic-array", ] [[package]] name = "bstr" -version = "0.2.16" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279" +checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05" dependencies = [ "memchr", + "serde", ] [[package]] -name = "byte-tools" -version = "0.3.1" +name = "bumpalo" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] -name = "byteorder" -version = "1.4.3" +name = "cc" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" [[package]] name = "cfg-if" @@ -93,65 +132,124 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" dependencies = [ - "libc", - "num-integer", + "android-tzdata", + "iana-time-zone", "num-traits", - "time", "winapi", ] [[package]] name = "chrono-tz" -version = "0.5.3" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2554a3155fec064362507487171dcc4edc3df60cb10f3a1fb10ed8094822b120" +checksum = "58549f1842da3080ce63002102d5bc954c7bc843d4f47818e642abdc36253552" dependencies = [ "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db058d493fb2f65f41861bfed7e3fe6335264a9f0f92710cab5bdf01fef09069" +dependencies = [ "parse-zoneinfo", + "phf", + "phf_codegen", ] [[package]] name = "clap" -version = "2.33.3" +version = "4.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d" dependencies = [ - "ansi_term", - "atty", - "bitflags", + "clap_builder", + "clap_derive", + "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", "strsim", - "textwrap", - "unicode-width", - "vec_map", ] [[package]] -name = "crossbeam-utils" -version = "0.8.5" +name = "clap_derive" +version = "4.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" +checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" dependencies = [ - "cfg-if", - "lazy_static", + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "cpufeatures" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", ] [[package]] name = "deunicode" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690" +checksum = "d95203a6a50906215a502507c0f879a0ce7ff205a6111e2db2a5ef8e4bb92e43" [[package]] name = "digest" -version = "0.8.1" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "generic-array", + "block-buffer", + "crypto-common", ] [[package]] @@ -176,10 +274,37 @@ dependencies = [ ] [[package]] -name = "fake-simd" +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys", +] + +[[package]] +name = "errno-dragonfly" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "fastrand" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" [[package]] name = "fnv" @@ -189,18 +314,19 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "generic-array" -version = "0.12.4" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", + "version_check", ] [[package]] name = "getrandom" -version = "0.2.3" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", @@ -209,15 +335,15 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.8" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd" +checksum = "aca8bbd8e0707c1887a8bbb7e6b40e228f251ff5d62c8220a4a7a53c73aff006" dependencies = [ "aho-corasick", "bstr", @@ -232,39 +358,67 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc" dependencies = [ - "bitflags", + "bitflags 1.3.2", "ignore", "walkdir", ] +[[package]] +name = "hashbrown" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" + [[package]] name = "heck" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.1.19" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" + +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" dependencies = [ - "libc", + "libm", ] [[package]] -name = "humansize" -version = "1.1.1" +name = "iana-time-zone" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] [[package]] name = "ignore" -version = "0.4.18" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" +checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" dependencies = [ - "crossbeam-utils", "globset", "lazy_static", "log", @@ -276,15 +430,45 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "indexmap" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi", + "rustix", + "windows-sys", +] + [[package]] name = "itoa" -version = "0.4.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "js-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +dependencies = [ + "wasm-bindgen", +] [[package]] name = "kickstart" -version = "0.3.0" +version = "0.4.0" dependencies = [ "clap", "glob", @@ -307,61 +491,48 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.98" +version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" [[package]] -name = "log" -version = "0.4.14" +name = "libm" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if", -] +checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" [[package]] -name = "maplit" -version = "1.0.2" +name = "linux-raw-sys" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" +checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" [[package]] -name = "memchr" -version = "2.4.0" +name = "log" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" [[package]] -name = "num-integer" -version = "0.1.44" +name = "memchr" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" -dependencies = [ - "autocfg", - "num-traits", -] +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", ] [[package]] name = "once_cell" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" - -[[package]] -name = "opaque-debug" -version = "0.2.3" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "parse-zoneinfo" @@ -374,24 +545,25 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pest" -version = "2.1.3" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +checksum = "1acb4a4365a13f749a93f1a094a7805e5cfa0955373a9de860d962eaa3a5fe5a" dependencies = [ + "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.1.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +checksum = "666d00490d4ac815001da55838c500eafb0320019bbaa44444137c48b443a853" dependencies = [ "pest", "pest_generator", @@ -399,9 +571,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.1.3" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" +checksum = "68ca01446f50dbda87c1786af8770d535423fa8a53aec03b8f4e3d7eb10e0929" dependencies = [ "pest", "pest_meta", @@ -412,49 +584,87 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.1.3" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" +checksum = "56af0a30af74d0445c0bf6d9d051c979b516a1a5af790d251daee76005420a48" dependencies = [ - "maplit", + "once_cell", "pest", - "sha-1", + "sha2", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", + "uncased", ] [[package]] name = "ppv-lite86" -version = "0.2.10" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro2" -version = "1.0.27" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] name = "quote" -version = "1.0.9" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" dependencies = [ "proc-macro2", ] [[package]] name = "rand" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", "rand_core", - "rand_hc", ] [[package]] @@ -469,46 +679,59 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom", ] [[package]] -name = "rand_hc" -version = "0.3.1" +name = "redox_syscall" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "rand_core", + "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.2.9" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] name = "redox_users" -version = "0.4.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom", - "redox_syscall", + "redox_syscall 0.2.16", + "thiserror", ] [[package]] name = "regex" -version = "1.5.4" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7b6d6190b7594385f61bd3911cd1be99dfddcfc365a4160cc2ab5bff4aed294" dependencies = [ "aho-corasick", "memchr", @@ -517,30 +740,34 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" [[package]] -name = "remove_dir_all" -version = "0.5.3" +name = "rustix" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" dependencies = [ - "winapi", + "bitflags 2.3.3", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", ] [[package]] name = "rustversion" -version = "1.0.5" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "same-file" @@ -553,18 +780,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.126" +version = "1.0.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03" +checksum = "0ea67f183f058fe88a4e3ec6e2788e003840893b91bac4559cabedd00863b3ed" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.126" +version = "1.0.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43" +checksum = "24e744d7782b686ab3b73267ef05697159cc0e5abbed3f47f9933165e5219036" dependencies = [ "proc-macro2", "quote", @@ -573,9 +800,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.64" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" +checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c" dependencies = [ "itoa", "ryu", @@ -583,17 +810,31 @@ dependencies = [ ] [[package]] -name = "sha-1" -version = "0.8.2" +name = "serde_spanned" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" dependencies = [ - "block-buffer", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +dependencies = [ + "cfg-if", + "cpufeatures", "digest", - "fake-simd", - "opaque-debug", ] +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + [[package]] name = "slug" version = "0.1.4" @@ -605,40 +846,39 @@ dependencies = [ [[package]] name = "strsim" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "syn" -version = "1.0.73" +version = "2.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7" +checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] name = "tempfile" -version = "3.2.0" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +checksum = "5486094ee78b2e5038a6382ed7645bc084dc2ec433426ca4c3cb61e2007b8998" dependencies = [ "cfg-if", - "libc", - "rand", - "redox_syscall", - "remove_dir_all", - "winapi", + "fastrand", + "redox_syscall 0.3.5", + "rustix", + "windows-sys", ] [[package]] name = "tera" -version = "1.12.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7571541dff0e57eaa2e931249f0d7489eb2b24b6b105546f8c2f1a47f15aaa3a" +checksum = "a5ab29bb4f3e256ae6ad5c3e2775aa1f8829f2c0c101fc407bfd3a6df15c60c5" dependencies = [ "chrono", "chrono-tz", @@ -653,6 +893,7 @@ dependencies = [ "serde", "serde_json", "slug", + "thread_local", "unic-segment", ] @@ -668,53 +909,88 @@ dependencies = [ ] [[package]] -name = "textwrap" -version = "0.11.0" +name = "thiserror" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" dependencies = [ - "unicode-width", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "thread_local" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" dependencies = [ "once_cell", ] [[package]] -name = "time" -version = "0.1.43" +name = "toml" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542" dependencies = [ - "libc", - "winapi", + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", ] [[package]] -name = "toml" -version = "0.5.8" +name = "toml_datetime" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" dependencies = [ "serde", ] +[[package]] +name = "toml_edit" +version = "0.19.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "typenum" -version = "1.13.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "ucd-trie" -version = "0.1.3" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "uncased" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +checksum = "9b9bc53168a4be7402ab86c3aad243a84dd7381d09be0eddc81280c1da95ca68" +dependencies = [ + "version_check", +] [[package]] name = "unic-char-property" @@ -767,39 +1043,92 @@ dependencies = [ ] [[package]] -name = "unicode-width" -version = "0.1.8" +name = "unicode-ident" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] -name = "unicode-xid" -version = "0.2.2" +name = "utf8parse" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] -name = "vec_map" -version = "0.8.2" +name = "version_check" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "winapi" @@ -831,3 +1160,87 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + +[[package]] +name = "winnow" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bd122eb777186e60c3fdf765a58ac76e41c582f1f535fbf3314434c6b58f3f7" +dependencies = [ + "memchr", +] diff --git a/Cargo.toml b/Cargo.toml index c96ca20..ce32960 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,14 +1,14 @@ [package] authors = ["Vincent Prouillet "] description = "A simple way to get started with a project by scaffolding from a template powered by the Tera engine" -edition = "2018" +edition = "2021" keywords = ["tera", "scaffolding", "templating", "generator", "boilerplate"] license = "MIT" name = "kickstart" -version = "0.3.0" +version = "0.4.0" [dependencies] -clap = "2" +clap = { version = "4", features = ["derive"] } glob = "0.3" memchr = "2" regex = "1" @@ -16,7 +16,7 @@ serde = {version = "1", features = ["derive"]} tera = "1" heck = "0.4.0" term = "0.7" -toml = "0.5" +toml = "0.7" walkdir = "2" [dev-dependencies] diff --git a/src/bin/kickstart.rs b/src/bin/kickstart.rs index b9109fe..afc6f52 100644 --- a/src/bin/kickstart.rs +++ b/src/bin/kickstart.rs @@ -1,46 +1,42 @@ -use std::env; use std::error::Error; -use std::path::Path; +use std::path::{PathBuf}; -use clap::{crate_authors, crate_description, crate_version, App, AppSettings, Arg, SubCommand}; +use clap::{Parser, Subcommand}; use kickstart::generation::Template; use kickstart::terminal; use kickstart::validate::validate_file; -pub fn build_cli() -> App<'static, 'static> { - App::new("kickstart") - .version(crate_version!()) - .author(crate_authors!()) - .about(crate_description!()) - .setting(AppSettings::SubcommandsNegateReqs) - .arg( - Arg::with_name("template") - .required(true) - .help("Template to use: a local path or a HTTP url pointing to a Git repository"), - ) - .arg( - Arg::with_name("output-dir") - .short("o") - .long("output-dir") - .takes_value(true) - .help("Where to output the project: defaults to the current directory"), - ) - .arg( - Arg::with_name("sub-dir") - .short("s") - .long("sub-dir") - .takes_value(true) - .help("A subdirectory of the chosen template to use, to allow nested templates."), - ) - .arg( - Arg::with_name("no-input") - .long("no-input") - .help("Do not prompt for parameters and only use the defaults from template.toml"), - ) - .subcommands(vec![SubCommand::with_name("validate") - .about("Validates that a template.toml is valid") - .arg(Arg::with_name("path").required(true).help("The path to the template.toml"))]) +#[derive(Parser)] +#[clap(version, author, about, subcommand_negates_reqs = true)] +pub struct Cli { + /// Template to use: a local path or a HTTP url pointing to a Git repository + #[clap(required = true)] + pub template: Option, + + /// Where to output the project: defaults to the current directory + #[clap(short = 'o', long, default_value = ".")] + pub output_dir: PathBuf, + + /// A subdirectory of the chosen template to use, to allow nested templates. + #[clap(short = 's', long)] + pub sub_dir: Option, + + /// Do not prompt for parameters and only use the defaults from template.toml + #[clap(long, default_value_t = false)] + pub no_input: bool, + + #[clap(subcommand)] + pub command: Option, +} + +#[derive(Debug, Subcommand)] +pub enum Command { + /// Validates that a template.toml is valid + Validate { + /// The path to the template.toml + path: PathBuf, + }, } fn bail(e: &dyn Error) -> ! { @@ -54,44 +50,32 @@ fn bail(e: &dyn Error) -> ! { } fn main() { - let matches = build_cli().get_matches(); + let cli = Cli::parse(); - match matches.subcommand() { - ("validate", Some(matches)) => { - let errs = match validate_file(matches.value_of("path").unwrap()) { - Ok(e) => e, - Err(e) => bail(&e), - }; + if let Some(Command::Validate { path }) = cli.command { + let errs = match validate_file(path) { + Ok(e) => e, + Err(e) => bail(&e), + }; - if !errs.is_empty() { - terminal::error("The template.toml is invalid:\n"); - for err in errs { - terminal::error(&format!("- {}\n", err)); - } - ::std::process::exit(1); - } else { - terminal::success("The template.toml file is valid!\n"); + if !errs.is_empty() { + terminal::error("The template.toml is invalid:\n"); + for err in errs { + terminal::error(&format!("- {}\n", err)); } + ::std::process::exit(1); + } else { + terminal::success("The template.toml file is valid!\n"); } - _ => { - // The actual generation call - let template_path = matches.value_of("template").unwrap(); - let output_dir = matches - .value_of("output-dir") - .map(|p| Path::new(p).to_path_buf()) - .unwrap_or_else(|| env::current_dir().unwrap()); - let no_input = matches.is_present("no-input"); - let sub_dir = matches.value_of("sub-dir"); + } else { + let template = match Template::from_input(&cli.template.unwrap(), cli.sub_dir.as_deref()) { + Ok(t) => t, + Err(e) => bail(&e), + }; - let template = match Template::from_input(template_path, sub_dir) { - Ok(t) => t, - Err(e) => bail(&e), - }; - - match template.generate(&output_dir, no_input) { - Ok(_) => terminal::success("\nEverything done, ready to go!\n"), - Err(e) => bail(&e), - }; - } + match template.generate(&cli.output_dir, cli.no_input) { + Ok(_) => terminal::success("\nEverything done, ready to go!\n"), + Err(e) => bail(&e), + }; } } diff --git a/src/definition.rs b/src/definition.rs index 77140da..18dba06 100644 --- a/src/definition.rs +++ b/src/definition.rs @@ -1,13 +1,12 @@ -use std::collections::{HashMap}; +use std::collections::HashMap; -use regex::{Regex, Match}; use serde::Deserialize; -use tera::{Context}; +use tera::Context; use toml::Value; use crate::errors::{new_error, ErrorKind, Result}; use crate::prompt::{ask_bool, ask_choices, ask_integer, ask_string}; -use crate::utils::{render_one_off_template}; +use crate::utils::render_one_off_template; /// A condition for a question to be asked #[derive(Debug, Clone, PartialEq, Deserialize)] @@ -125,7 +124,7 @@ impl TemplateDefinition { let rendered_default = render_one_off_template(&s, &context, None); match rendered_default { Err(e) => return Err(e), - Ok(v ) => v, + Ok(v) => v, } } else { s.clone() @@ -303,7 +302,7 @@ mod tests { assert_eq!(tpl.variables.len(), 3); let res = tpl.ask_questions(true); - + assert!(res.is_ok()); let res = res.unwrap(); @@ -314,6 +313,6 @@ mod tests { let got_value = res.get("manifest").unwrap(); let expected_value: String = String::from("my_project-other_project-manifest.md"); - assert_eq!(got_value, &Value::String(expected_value)) + assert_eq!(got_value, &Value::String(expected_value)) } } diff --git a/src/generation.rs b/src/generation.rs index 1a9192a..7afed2c 100644 --- a/src/generation.rs +++ b/src/generation.rs @@ -6,12 +6,14 @@ use std::process::Command; use std::str; use glob::Pattern; -use tera::{Context}; +use tera::Context; use walkdir::WalkDir; use crate::definition::TemplateDefinition; use crate::errors::{map_io_err, new_error, ErrorKind, Result}; -use crate::utils::{render_one_off_template, create_directory, get_source, is_binary, read_file, write_file, Source}; +use crate::utils::{ + create_directory, get_source, is_binary, read_file, render_one_off_template, write_file, Source, +}; /// The current template being generated #[derive(Debug, PartialEq)] diff --git a/src/utils.rs b/src/utils.rs index c218bd2..295c4a8 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -5,8 +5,8 @@ use std::path::{Path, PathBuf}; use memchr::memchr; use tera::{Context, Tera}; +use crate::errors::{map_io_err, new_error, ErrorKind, Result}; use crate::filters::register_all_filters; -use crate::errors::{map_io_err, new_error, Result, ErrorKind}; #[derive(Debug, Clone, Eq, PartialEq)] pub enum Source { @@ -57,8 +57,7 @@ pub fn render_one_off_template( let mut tera = Tera::default(); register_all_filters(&mut tera); - tera.render_str(content, context) - .map_err(|err| new_error(ErrorKind::Tera { err, path })) + tera.render_str(content, context).map_err(|err| new_error(ErrorKind::Tera { err, path })) } /// Is the buffer from a binary file? From 5f5002f32d8f047f10e10afedd7ddec4c2723c66 Mon Sep 17 00:00:00 2001 From: Vincent Prouillet Date: Tue, 1 Aug 2023 22:53:39 +0200 Subject: [PATCH 2/5] clippy --- src/bin/kickstart.rs | 2 +- src/definition.rs | 2 +- src/filters.rs | 14 +++++++------- src/generation.rs | 14 +++++++------- src/validate.rs | 2 +- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/bin/kickstart.rs b/src/bin/kickstart.rs index afc6f52..09f4af8 100644 --- a/src/bin/kickstart.rs +++ b/src/bin/kickstart.rs @@ -1,5 +1,5 @@ use std::error::Error; -use std::path::{PathBuf}; +use std::path::PathBuf; use clap::{Parser, Subcommand}; diff --git a/src/definition.rs b/src/definition.rs index 18dba06..fb37d51 100644 --- a/src/definition.rs +++ b/src/definition.rs @@ -121,7 +121,7 @@ impl TemplateDefinition { context.insert(key, val); } - let rendered_default = render_one_off_template(&s, &context, None); + let rendered_default = render_one_off_template(s, &context, None); match rendered_default { Err(e) => return Err(e), Ok(v) => v, diff --git a/src/filters.rs b/src/filters.rs index 762ef54..6935079 100644 --- a/src/filters.rs +++ b/src/filters.rs @@ -15,35 +15,35 @@ pub fn register_all_filters(tera: &mut Tera) { pub fn upper_camel_case(value: &Value, _: &HashMap) -> Result { let s = try_get_value!("upper_camel_case", "value", String, value); - Ok(to_value(&s.to_upper_camel_case()).unwrap()) + Ok(to_value(s.to_upper_camel_case()).unwrap()) } pub fn camel_case(value: &Value, _: &HashMap) -> Result { let s = try_get_value!("camel_case", "value", String, value); - Ok(to_value(&s.to_lower_camel_case()).unwrap()) + Ok(to_value(s.to_lower_camel_case()).unwrap()) } pub fn snake_case(value: &Value, _: &HashMap) -> Result { let s = try_get_value!("snake_case", "value", String, value); - Ok(to_value(&s.to_snake_case()).unwrap()) + Ok(to_value(s.to_snake_case()).unwrap()) } pub fn kebab_case(value: &Value, _: &HashMap) -> Result { let s = try_get_value!("kebab_case", "value", String, value); - Ok(to_value(&s.to_kebab_case()).unwrap()) + Ok(to_value(s.to_kebab_case()).unwrap()) } pub fn shouty_snake_case(value: &Value, _: &HashMap) -> Result { let s = try_get_value!("shouty_snake_case", "value", String, value); - Ok(to_value(&s.to_shouty_snake_case()).unwrap()) + Ok(to_value(s.to_shouty_snake_case()).unwrap()) } pub fn title_case(value: &Value, _: &HashMap) -> Result { let s = try_get_value!("title_case", "value", String, value); - Ok(to_value(&s.to_title_case()).unwrap()) + Ok(to_value(s.to_title_case()).unwrap()) } pub fn shouty_kebab_case(value: &Value, _: &HashMap) -> Result { let s = try_get_value!("shouty_kebab_case", "value", String, value); - Ok(to_value(&s.to_shouty_kebab_case()).unwrap()) + Ok(to_value(s.to_shouty_kebab_case()).unwrap()) } diff --git a/src/generation.rs b/src/generation.rs index 7afed2c..f16b441 100644 --- a/src/generation.rs +++ b/src/generation.rs @@ -48,7 +48,7 @@ impl Template { // on some platforms: // https://www.reddit.com/r/rust/comments/92mbk5/kickstart_a_scaffolding_tool_to_get_new_projects/e3ahegw Command::new("git") - .args(&["clone", "--recurse-submodules", remote, &format!("{}", tmp.display())]) + .args(["clone", "--recurse-submodules", remote, &format!("{}", tmp.display())]) .output() .map_err(|err| new_error(ErrorKind::Git { err }))?; Ok(Template::from_local(&tmp, sub_dir)) @@ -81,7 +81,7 @@ impl Template { if !output_dir.exists() { println!("Creating {:?}", output_dir); - create_directory(&output_dir)?; + create_directory(output_dir)?; } // Create the glob patterns of files to copy without rendering first, only once @@ -89,7 +89,7 @@ impl Template { definition.copy_without_render.iter().map(|s| Pattern::new(s).unwrap()).collect(); let start_path = if let Some(ref directory) = definition.directory { - self.path.join(&directory) + self.path.join(directory) } else { self.path.clone() }; @@ -136,19 +136,19 @@ impl Template { } // Only pass non-binary files or the files not matching the copy_without_render patterns through Tera - let mut f = File::open(&entry.path())?; + let mut f = File::open(entry.path())?; let mut buffer = Vec::new(); f.read_to_end(&mut buffer)?; let no_render = patterns.iter().map(|p| p.matches_path(&real_path)).any(|x| x); if no_render || is_binary(&buffer) { - map_io_err(fs::copy(&entry.path(), &real_path), entry.path())?; + map_io_err(fs::copy(entry.path(), &real_path), entry.path())?; continue; } let contents = render_one_off_template( - &str::from_utf8(&buffer).unwrap(), + str::from_utf8(&buffer).unwrap(), &context, Some(entry.path().to_path_buf()), )?; @@ -160,7 +160,7 @@ impl Template { if let Some(val) = variables.get(&cleanup.name) { if *val == cleanup.value { for p in &cleanup.paths { - let actual_path = render_one_off_template(&p, &context, None)?; + let actual_path = render_one_off_template(p, &context, None)?; let path_to_delete = output_dir.join(actual_path); if !path_to_delete.exists() { continue; diff --git a/src/validate.rs b/src/validate.rs index 694bd15..a273005 100644 --- a/src/validate.rs +++ b/src/validate.rs @@ -72,7 +72,7 @@ pub fn validate_definition(def: &TemplateDefinition) -> Vec { match Regex::new(pattern) { Ok(re) => { - if !re.is_match(&var.default.as_str().unwrap()) { + if !re.is_match(var.default.as_str().unwrap()) { errs.push(format!( "Variable `{}` has a default that doesn't pass its validation regex", var.name From ab8fa5f6d1953adbafc4ba32277bbfd19c6f9a3b Mon Sep 17 00:00:00 2001 From: Vincent Prouillet Date: Tue, 1 Aug 2023 22:54:59 +0200 Subject: [PATCH 3/5] update readme --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d0f4f72..cc5b7ac 100644 --- a/README.md +++ b/README.md @@ -194,7 +194,12 @@ You can use these like any other filter, e.g. `{{variable_name | camel_case}}`. ## Changelog -### 0.3.0 (unreleased) +### 0.4.0 (unrelased) + +- Add case conversion filter +- Update dependencies + +### 0.3.0 (2021-07-10) - Update dependencies From c3aecd9eb12e522e7a7438a40a0d205f93e6bdf9 Mon Sep 17 00:00:00 2001 From: Vincent Prouillet Date: Tue, 1 Aug 2023 22:55:56 +0200 Subject: [PATCH 4/5] Update images for CI --- azure-pipelines.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 34f458a..2e2c17a 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -11,17 +11,17 @@ stages: strategy: matrix: windows-stable: - imageName: 'vs2017-win2016' + imageName: 'windows-2022' rustup_toolchain: stable mac-stable: - imageName: 'macos-10.14' + imageName: 'macos-13' rustup_toolchain: stable linux-stable: imageName: 'ubuntu-latest' rustup_toolchain: stable linux-msrv: imageName: 'ubuntu-latest' - rustup_toolchain: 1.40.0 + rustup_toolchain: 1.65.0 pool: vmImage: $(imageName) steps: From ba0388f4eb3c38cdeb4d3b61bc3bd45829f6f2c5 Mon Sep 17 00:00:00 2001 From: Vincent Prouillet Date: Tue, 1 Aug 2023 22:57:59 +0200 Subject: [PATCH 5/5] Update images for build as well --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 2e2c17a..bf56379 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -52,11 +52,11 @@ stages: strategy: matrix: windows-stable: - imageName: 'vs2017-win2016' + imageName: 'windows-2022' rustup_toolchain: stable target: 'x86_64-pc-windows-msvc' mac-stable: - imageName: 'macos-10.14' + imageName: 'macos-13' rustup_toolchain: stable target: 'x86_64-apple-darwin' linux-stable: