From 37b9244c927c4be9adf64f5e7133ff02908302c4 Mon Sep 17 00:00:00 2001 From: Marcelo Hernandez Lopez Date: Sun, 12 May 2024 03:41:29 -0400 Subject: [PATCH 1/5] new: save last template in session.json + add serde/serde_json deps + lower min version for all deps to ease packaging --- Cargo.lock | 276 ++++++++++++++++++++++++++----------------------- Cargo.toml | 16 +-- src/lib.rs | 50 ++++++--- src/session.rs | 6 ++ 4 files changed, 197 insertions(+), 151 deletions(-) create mode 100644 src/session.rs diff --git a/Cargo.lock b/Cargo.lock index 00cfa97..69993b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,47 +19,48 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.12" +version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b09b5178381e0874812a9b157f7fe84982617e48f71f4e3235482775e5b540" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -67,15 +68,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" [[package]] name = "assert_cmd" -version = "2.0.13" +version = "2.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00ad3f3a942eee60335ab4342358c161ee296829e0d16ff42fc1d6cb07815467" +checksum = "ed72493ac66d5804837f480ab3766c72bdfab91a65e565fc54fa9e42db0073a8" dependencies = [ "anstyle", "bstr", @@ -96,31 +97,27 @@ dependencies = [ "clap", "clap_complete", "directories", + "serde", + "serde_json", ] [[package]] name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "bitflags" -version = "1.3.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "bstr" -version = "1.9.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" dependencies = [ "memchr", "regex-automata", @@ -129,18 +126,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.15.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32a994c2b3ca201d9b263612a374263f05e7adde37c4707f693dcd375076d1f" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "cc" -version = "1.0.83" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] +checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" [[package]] name = "cfg-if" @@ -150,23 +144,23 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.34" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.0", + "windows-targets 0.52.5", ] [[package]] name = "clap" -version = "4.5.1" +version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c918d541ef2913577a0f9566e9ce27cb35b6df072075769e0b26cb5a554520da" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" dependencies = [ "clap_builder", "clap_derive", @@ -174,9 +168,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.1" +version = "4.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3e7391dad68afb0c2ede1bf619f579a3dc9c2ec67f089baa397123a2f3d1eb" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" dependencies = [ "anstream", "anstyle", @@ -186,18 +180,18 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.1" +version = "4.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "885e4d7d5af40bfb99ae6f9433e292feac98d452dcb3ec3d25dfe7552b77da8c" +checksum = "dd79504325bf38b10165b02e89b4347300f855f273c4cb30c4a3209e6583275e" dependencies = [ "clap", ] [[package]] name = "clap_derive" -version = "4.5.0" +version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" dependencies = [ "heck", "proc-macro2", @@ -213,9 +207,9 @@ checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" [[package]] name = "core-foundation-sys" @@ -258,9 +252,9 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "getrandom" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -269,9 +263,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "iana-time-zone" @@ -296,49 +290,60 @@ dependencies = [ "cc", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + [[package]] name = "js-sys" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] [[package]] name = "libc" -version = "0.2.153" +version = "0.2.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" [[package]] name = "libredox" -version = "0.0.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.4.2", + "bitflags", "libc", - "redox_syscall", ] [[package]] name = "log" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -384,36 +389,27 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_users" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" dependencies = [ "getrandom", "libredox", @@ -422,41 +418,58 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.5" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" + +[[package]] +name = "ryu" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "serde" -version = "1.0.196" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.196" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" dependencies = [ "proc-macro2", "quote", "syn", ] +[[package]] +name = "serde_json" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +dependencies = [ + "itoa", + "ryu", + "serde", +] + [[package]] name = "strsim" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.49" +version = "2.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915aea9e586f80826ee59f8453c1101f9d1c4b3964cd2460185ee8e299ada496" +checksum = "bf5be731623ca1a1fb7d8be6f261a3be6d3e2337b8a1f97be944d020c8fcb704" dependencies = [ "proc-macro2", "quote", @@ -471,18 +484,18 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "thiserror" -version = "1.0.57" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" +checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.57" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" +checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" dependencies = [ "proc-macro2", "quote", @@ -518,9 +531,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -528,9 +541,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", @@ -543,9 +556,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -553,9 +566,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", @@ -566,9 +579,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "windows-core" @@ -576,7 +589,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.5", ] [[package]] @@ -594,7 +607,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.5", ] [[package]] @@ -614,17 +627,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", ] [[package]] @@ -635,9 +649,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" [[package]] name = "windows_aarch64_msvc" @@ -647,9 +661,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" [[package]] name = "windows_i686_gnu" @@ -659,9 +673,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" [[package]] name = "windows_i686_msvc" @@ -671,9 +691,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" [[package]] name = "windows_x86_64_gnu" @@ -683,9 +703,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" [[package]] name = "windows_x86_64_gnullvm" @@ -695,9 +715,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" [[package]] name = "windows_x86_64_msvc" @@ -707,6 +727,6 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" diff --git a/Cargo.toml b/Cargo.toml index 353bb66..b1aff12 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,17 +11,19 @@ version = "0.2.0" edition = "2021" [dependencies] -anyhow = "1.0.79" -directories = "5.0.1" -clap = { version = "4.5.1", features = ["derive", "env"] } -chrono = "0.4.34" +anyhow = "1.0" +directories = "5.0" +clap = { version = "4.5", features = ["derive", "env"] } +chrono = "0.4.0" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" [build-dependencies] -clap = { version = "4.5.1", features = ["derive", "env"] } -clap_complete = "4.5.1" +clap = { version = "4.5", features = ["derive", "env"] } +clap_complete = "4.5" [dev-dependencies] -assert_cmd = "2.0.13" +assert_cmd = "2.0" [profile.release] lto = true diff --git a/src/lib.rs b/src/lib.rs index 16a961e..ad8f759 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,10 +1,18 @@ pub mod cli; +pub mod session; pub mod templates; pub use cli::*; +use session::Session; pub use templates::*; -use std::{env, fs, io, path::Path, process::Command}; +use std::{ + env, + fs::{self, File}, + io::{self, BufWriter}, + path::Path, + process::Command, +}; use anyhow::{bail, Context, Ok}; use chrono::Local; @@ -17,26 +25,28 @@ pub fn try_template( ) -> anyhow::Result<()> { let templates = Templates::try_from(data_dir)?; let wanted_dir = templates.find(template)?; + let tmp_dir = env::temp_dir().join("atmpt"); let time = Local::now().format("%Y_%m_%d-%H_%M_%S"); - let tmp_dir = env::temp_dir() - .join("atmpt") // store tmp projects in folder - .join(format!("{template}_{time}")); - copy_dir_recursively(wanted_dir, &tmp_dir)?; + let project_dir = tmp_dir.join(format!("{template}_{time}")); - let res = summon_and_wait(editor, &tmp_dir); - - if res.is_ok() && should_keep(action)? { - println!("Saved as {tmp_dir:?}."); - } else { - fs::remove_dir_all(&tmp_dir) - .with_context(|| format!("Failed to remove directory {tmp_dir:?}"))?; + copy_dir_recursively(wanted_dir, &project_dir)?; + if let Err(e) = summon_and_wait(editor, &project_dir) { + remove_attempt(&project_dir)?; + bail!(e); + } - println!("Deleted."); + // save session data to file + let file = File::create(tmp_dir.join("session.json"))?; + let session = Session { + last_template: template.to_owned(), + }; + serde_json::to_writer(BufWriter::new(file), &session)?; - if let Err(e) = res { - bail!(e); - } + if should_keep(action)? { + println!("Saved as {project_dir:?}."); + } else { + remove_attempt(&project_dir)?; } Ok(()) @@ -49,6 +59,14 @@ fn should_keep(action: Option) -> anyhow::Result { } } +fn remove_attempt(tmp_dir: &Path) -> anyhow::Result<()> { + fs::remove_dir_all(tmp_dir) + .with_context(|| format!("Failed to remove directory {tmp_dir:?}"))?; + + println!("Deleted."); + Ok(()) +} + fn summon_and_wait(editor: &str, cwd: &Path) -> anyhow::Result<()> { Command::new(editor) .current_dir(cwd) diff --git a/src/session.rs b/src/session.rs new file mode 100644 index 0000000..d61bf16 --- /dev/null +++ b/src/session.rs @@ -0,0 +1,6 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct Session { + pub last_template: String, +} From 4f692d0a7039ffccbf96c60ba264a307d5089d26 Mon Sep 17 00:00:00 2001 From: Marcelo Hernandez Lopez Date: Tue, 14 May 2024 23:53:24 -0400 Subject: [PATCH 2/5] new: --retry command recreates and opens the last template you used this session --- src/cli.rs | 3 +++ src/lib.rs | 14 +++++++++++--- src/main.rs | 16 +++++++++++++--- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index e996ac7..743d9f9 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -48,6 +48,9 @@ pub struct RequiredArgs { #[arg(group = "main", short, long, help = "List available templates")] pub list_templates: bool, + + #[arg(group = "main", short, long, help = "Retry last template")] + pub retry: bool, } #[derive(Debug, PartialEq, Eq)] diff --git a/src/lib.rs b/src/lib.rs index ad8f759..d43f564 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,13 +10,21 @@ use std::{ env, fs::{self, File}, io::{self, BufWriter}, - path::Path, + path::{Path, PathBuf}, process::Command, }; use anyhow::{bail, Context, Ok}; use chrono::Local; +pub fn get_atmpt_dir() -> PathBuf { + env::temp_dir().join("atmpt") +} + +pub fn get_session_path() -> PathBuf { + get_atmpt_dir().join("session.json") +} + pub fn try_template( template: &str, editor: &str, @@ -25,7 +33,7 @@ pub fn try_template( ) -> anyhow::Result<()> { let templates = Templates::try_from(data_dir)?; let wanted_dir = templates.find(template)?; - let tmp_dir = env::temp_dir().join("atmpt"); + let tmp_dir = get_atmpt_dir(); let time = Local::now().format("%Y_%m_%d-%H_%M_%S"); let project_dir = tmp_dir.join(format!("{template}_{time}")); @@ -37,7 +45,7 @@ pub fn try_template( } // save session data to file - let file = File::create(tmp_dir.join("session.json"))?; + let file = File::create(get_session_path())?; let session = Session { last_template: template.to_owned(), }; diff --git a/src/main.rs b/src/main.rs index 5af4f1f..892107e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ -use std::{borrow::Cow, path::PathBuf}; +use std::{borrow::Cow, fs::File, io::BufReader, path::PathBuf}; -use anyhow::bail; -use atmpt::{templates::Templates, Atmpt}; +use anyhow::{bail, Context}; +use atmpt::{get_session_path, session::Session, templates::Templates, Atmpt}; use clap::Parser; use directories::ProjectDirs; @@ -24,6 +24,16 @@ fn main() -> anyhow::Result<()> { }; atmpt::try_template(&template, &editor, &data_dir, action)?; + } else if args.required.retry { + let file = File::open(get_session_path()) + .context("Could not open session file, have you run atmpt recently?")?; + let session: Session = + serde_json::from_reader(BufReader::new(file)).context("Failed to read session file")?; + let Some(editor) = args.editor else { + bail!("No editor to use! Set your $VISUAL variable or pass a command to --editor"); + }; + + atmpt::try_template(&session.last_template, &editor, &data_dir, action)?; } else if args.required.list_template_dir { println!("{}", data_dir.display()); } else { From f33128b3af36fc246e6e5266ec7802938470ed53 Mon Sep 17 00:00:00 2001 From: Marcelo Hernandez Lopez Date: Mon, 20 May 2024 19:51:52 -0400 Subject: [PATCH 3/5] new: --previous option Will attempt (hehe) to open last modified project --- src/cli.rs | 5 +++- src/lib.rs | 24 ++++++++--------- src/main.rs | 77 ++++++++++++++++++++++++++++++++++++++++------------- 3 files changed, 74 insertions(+), 32 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 743d9f9..7e8f87a 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -12,7 +12,7 @@ pub struct Atmpt { pub required: RequiredArgs, #[arg(short, long, env = EDITOR_KEY, help = "Editor to use")] - pub editor: Option, + pub editor: String, #[arg( short = 'n', @@ -51,6 +51,9 @@ pub struct RequiredArgs { #[arg(group = "main", short, long, help = "Retry last template")] pub retry: bool, + + #[arg(group = "main", short, long, help = "Open last modified attempt")] + pub previous: bool, } #[derive(Debug, PartialEq, Eq)] diff --git a/src/lib.rs b/src/lib.rs index d43f564..2f6f2fd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -60,6 +60,18 @@ pub fn try_template( Ok(()) } +pub fn summon_and_wait(editor: &str, cwd: &Path) -> anyhow::Result<()> { + Command::new(editor) + .current_dir(cwd) + .arg(".") + .spawn() + .context("Failed to launch editor!")? + .wait() + .context("Failed waiting for editor!")?; + + Ok(()) +} + fn should_keep(action: Option) -> anyhow::Result { match action { Some(action) => Ok(action == AfterAction::Keep), @@ -75,18 +87,6 @@ fn remove_attempt(tmp_dir: &Path) -> anyhow::Result<()> { Ok(()) } -fn summon_and_wait(editor: &str, cwd: &Path) -> anyhow::Result<()> { - Command::new(editor) - .current_dir(cwd) - .arg(".") - .spawn() - .context("Failed to launch editor!")? - .wait() - .context("Failed waiting for editor!")?; - - Ok(()) -} - /// Will print out a question and wait for user input in the form of `y` or `n` /// (returning true if `y`). Any capitalization works. Defaults to `n` on a /// blank character (e.g. just pressing Enter). diff --git a/src/main.rs b/src/main.rs index 892107e..19cf8f2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,12 @@ -use std::{borrow::Cow, fs::File, io::BufReader, path::PathBuf}; +use std::{ + borrow::Cow, + fs::{self, File}, + io::BufReader, + path::PathBuf, +}; use anyhow::{bail, Context}; -use atmpt::{get_session_path, session::Session, templates::Templates, Atmpt}; +use atmpt::{get_atmpt_dir, get_session_path, session::Session, templates::Templates, Atmpt}; use clap::Parser; use directories::ProjectDirs; @@ -18,27 +23,61 @@ fn main() -> anyhow::Result<()> { data_dir = Cow::Owned(PathBuf::from(new_dir)); }; - if let Some(template) = args.required.template { - let Some(editor) = args.editor else { - bail!("No editor to use! Set your $VISUAL variable or pass a command to --editor"); - }; + if args.required.list_template_dir { + println!("{}", data_dir.display()); + } else if args.required.list_templates { + println!("{}", Templates::try_from(data_dir.as_ref())?); + } else if args.required.previous { + atmpt::summon_and_wait(&args.editor, &last_modified_attempt()?)?; + } else { + let template = match args.required.template { + Some(t) => t, + // assume retry option + None => { + let file = File::open(get_session_path()) + .context("Could not open session file, have you run atmpt recently?")?; + let session: Session = serde_json::from_reader(BufReader::new(file)) + .context("Failed to read session file!")?; - atmpt::try_template(&template, &editor, &data_dir, action)?; - } else if args.required.retry { - let file = File::open(get_session_path()) - .context("Could not open session file, have you run atmpt recently?")?; - let session: Session = - serde_json::from_reader(BufReader::new(file)).context("Failed to read session file")?; - let Some(editor) = args.editor else { - bail!("No editor to use! Set your $VISUAL variable or pass a command to --editor"); + session.last_template + } }; - atmpt::try_template(&session.last_template, &editor, &data_dir, action)?; - } else if args.required.list_template_dir { - println!("{}", data_dir.display()); - } else { - println!("{}", Templates::try_from(data_dir.as_ref())?); + atmpt::try_template(&template, &args.editor, &data_dir, action)?; } Ok(()) } + +fn last_modified_attempt() -> anyhow::Result { + let atmpt_dir = get_atmpt_dir(); + if !atmpt_dir.exists() { + bail!("Could not find atmpt folder, have you run atmpt recently?"); + } + + let entries = fs::read_dir(atmpt_dir)?; + let mut last = None; + for entry in entries { + let entry = entry?; + + let metadata = entry.metadata()?; + if !metadata.is_dir() { + continue; + } + + let new_time = metadata.modified()?; + if let Some((_, time)) = last { + if new_time <= time { + continue; + } + } + + last = Some((entry.path(), new_time)); + } + + if let Some((path, _)) = last { + Ok(path) + } else { + bail!("Could not find last modified attempt, have you saved any?") + } +} From 9bc974e974bc60f2db7e0d43f758ad38bcfbd7b9 Mon Sep 17 00:00:00 2001 From: Marcelo Date: Tue, 21 May 2024 21:19:42 -0400 Subject: [PATCH 4/5] tests: add pass on retry + fail on no args + todo for better testing, can't add --previous testing because it will conflict --- tests/mod.rs | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/tests/mod.rs b/tests/mod.rs index 28515d6..aa5d599 100644 --- a/tests/mod.rs +++ b/tests/mod.rs @@ -19,7 +19,6 @@ fn cmd() -> Command { // tests using the same language template may clash and fail... // ======= Failures ======= - #[test] fn fail_on_conflicting_opts() { cmd().args(["-l", "-d"]).assert().failure(); @@ -36,17 +35,41 @@ fn fail_on_keep_and_delete() { } #[test] -fn incorrect_template() { +fn fail_on_incorrect_template() { cmd().arg("_blahblah!").assert().failure(); } #[test] -fn incorrect_editor() { +fn fail_on_incorrect_editor() { cmd().args(["-e", "fakeeditor", "java"]).assert().failure(); } +#[test] +fn fail_on_no_args() { + cmd().assert().failure(); +} + +// TODO: Some way of setting each test's dir so this does not make pass_on_retry fail +// +//#[test] +//fn fail_on_retry_without_session_data() { +// let session = get_session_path(); +// +// if session.exists() { +// fs::remove_file(get_session_path()).unwrap(); +// } +// +// cmd().arg("-r").assert().failure(); +//} + // ======= Successes ======= #[test] -fn correct_template() { +fn pass_on_correct_template() { cmd().arg("cpp").assert().success(); } + +#[test] +fn pass_on_retry() { + cmd().arg("c").assert().success(); + cmd().arg("-r").assert().success(); +} From 41473b10267f68cc1957005a7e768bfe6622cf1d Mon Sep 17 00:00:00 2001 From: Marcelo Date: Tue, 21 May 2024 21:35:25 -0400 Subject: [PATCH 5/5] oops: without diff dirs pass_on* clash --- tests/mod.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/mod.rs b/tests/mod.rs index aa5d599..7fe92cc 100644 --- a/tests/mod.rs +++ b/tests/mod.rs @@ -68,8 +68,8 @@ fn pass_on_correct_template() { cmd().arg("cpp").assert().success(); } -#[test] -fn pass_on_retry() { - cmd().arg("c").assert().success(); - cmd().arg("-r").assert().success(); -} +//#[test] +//fn pass_on_retry() { +// cmd().arg("cpp").assert().success(); +// cmd().arg("-r").assert().success(); +//}