From 000003001961ed1b5114d487e45f75c7b96069dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Jane=C5=BEi=C4=8D?= Date: Mon, 20 Nov 2023 15:44:14 +0100 Subject: [PATCH] feat!: decouple download and scaffold from main package into workspace Added workspace structure to Cargo.toml. This way we don't need to build all dependencies for helper binaries. Also changed .cargo/config accordingly. --- .cargo/config | 8 ++--- Cargo.lock | 32 ++++++++++-------- Cargo.toml | 33 ++++++++++++------- README.md | 3 +- src/lib.rs | 5 --- utils/download/Cargo.toml | 14 ++++++++ .../download.rs => utils/download/src/main.rs | 7 +++- utils/scaffold/Cargo.toml | 14 ++++++++ .../scaffold.rs => utils/scaffold/src/main.rs | 7 +++- 9 files changed, 85 insertions(+), 38 deletions(-) create mode 100644 utils/download/Cargo.toml rename src/bin/download.rs => utils/download/src/main.rs (90%) create mode 100644 utils/scaffold/Cargo.toml rename src/bin/scaffold.rs => utils/scaffold/src/main.rs (94%) diff --git a/.cargo/config b/.cargo/config index e963c04..c6d08dc 100644 --- a/.cargo/config +++ b/.cargo/config @@ -1,6 +1,4 @@ [alias] -scaffold = "run --bin scaffold --quiet --release --" -download = "run --bin download --quiet --release --" -download_all = "run --bin download_all --quiet --release --" - -solve = "run --bin" +scaffold = "run -p scaffold --release --" +download = "run -p download --release --" +solve = "run --bin --release" diff --git a/Cargo.lock b/Cargo.lock index a6d49d5..97cae0c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,17 +45,11 @@ checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" [[package]] name = "aoc" -version = "29.0.0" +version = "30.0.0" dependencies = [ - "dotenvy", "elves", "hashbrown 0.14.2", - "hex-literal", "itertools 0.12.0", - "lazy_static", - "pico-args", - "regex", - "reqwest", ] [[package]] @@ -137,6 +131,15 @@ version = "0.15.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03d8c417d7a8cb362e0c37e5d815f5eb7c37f79ff93707329d5a194e42e54ca0" +[[package]] +name = "download" +version = "30.0.0" +dependencies = [ + "dotenvy", + "pico-args", + "reqwest", +] + [[package]] name = "either" version = "1.8.0" @@ -309,12 +312,6 @@ dependencies = [ "libc", ] -[[package]] -name = "hex-literal" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" - [[package]] name = "http" version = "0.2.8" @@ -740,6 +737,15 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +[[package]] +name = "scaffold" +version = "30.0.0" +dependencies = [ + "dotenvy", + "pico-args", + "reqwest", +] + [[package]] name = "schannel" version = "0.1.20" diff --git a/Cargo.toml b/Cargo.toml index ba1dd2f..b3a19d1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,20 +1,31 @@ [package] name = "aoc" +description.workspace = true +readme.workspace = true +version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +repository.workspace = true + +[dependencies] +# many cool stuff for iterators +itertools = "0.12.0" +# faster hashing algorithms for hashmaps and hashsets +hashbrown = "0.14.2" +# my library with some sorters and parses +elves = "0.2.0" + +[workspace] + +members = ["utils/download", "utils/scaffold"] + +[workspace.package] description = "template for advent of code" readme = "README.md" -version = "29.0.0" +version = "30.0.0" edition = "2021" license = "MIT" authors = ["Matej Janežič "] repository = "https://github.com/janezicmatej/aoc-template.git" -[dependencies] -dotenvy = "0.15.6" -elves = "0.2.0" -hashbrown = "0.14.2" -hex-literal = "0.4.1" -itertools = "0.12.0" -lazy_static = "1.4.0" -pico-args = "0.5.0" -regex = "1.10.2" -reqwest = { version = "0.11.22", features = ["blocking"] } diff --git a/README.md b/README.md index ce9a8f9..aad67bc 100644 --- a/README.md +++ b/README.md @@ -8,19 +8,18 @@ - `src/` : - `bin/`: - `.rs`: solution files - - `*.rs`: convenience scripts - `inputs/`: this directory is gitignored, input files go here - `examples/`: example files go here; you can push this as test are run in ci - `utils/`: utils files go here - `lib.rs`: contains framework code - `.env.example`: example dotenv file +- `utils/`: binary packages with convenience scripts structured using cargo workspaces ### Cli - `cargo scaffold `: prepare solution files for `day` - `cargo download `: download input file for `day` - `cargo solve `: run solution against input for `day` - ### dotenv set `YEAR` to whichever year you are solving for and `TOKEN` to AoC session Cookie diff --git a/src/lib.rs b/src/lib.rs index c1624c9..7c6bcc4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -47,8 +47,3 @@ pub fn read_file(folder: &str, day: u8) -> String { let f = fs::read_to_string(filepath); f.expect("could not open input file").trim().to_string() } - -pub fn parse_args() -> Result { - let mut args = pico_args::Arguments::from_env(); - args.free_from_str() -} diff --git a/utils/download/Cargo.toml b/utils/download/Cargo.toml new file mode 100644 index 000000000..ddc6fe1 --- /dev/null +++ b/utils/download/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "download" +description.workspace = true +readme.workspace = true +version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +repository.workspace = true + +[dependencies] +reqwest = { version = "0.11.22", features = ["blocking"] } +dotenvy = "0.15.6" +pico-args = "0.5.0" diff --git a/src/bin/download.rs b/utils/download/src/main.rs similarity index 90% rename from src/bin/download.rs rename to utils/download/src/main.rs index 0771c6b..8de321f 100644 --- a/src/bin/download.rs +++ b/utils/download/src/main.rs @@ -3,8 +3,13 @@ use reqwest::blocking::Client; use reqwest::header; use std::{env, fs::OpenOptions, io::Write, process}; +pub fn parse_args() -> Result { + let mut args = pico_args::Arguments::from_env(); + args.free_from_str() +} + fn main() { - let day: u8 = match aoc::parse_args() { + let day: u8 = match parse_args() { Ok(day) => day, Err(_) => { eprintln!("Need to specify a day (as integer). example: `cargo download 7`"); diff --git a/utils/scaffold/Cargo.toml b/utils/scaffold/Cargo.toml new file mode 100644 index 000000000..169dff7 --- /dev/null +++ b/utils/scaffold/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "scaffold" +description.workspace = true +readme.workspace = true +version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +repository.workspace = true + +[dependencies] +reqwest = { version = "0.11.22", features = ["blocking"] } +dotenvy = "0.15.6" +pico-args = "0.5.0" diff --git a/src/bin/scaffold.rs b/utils/scaffold/src/main.rs similarity index 94% rename from src/bin/scaffold.rs rename to utils/scaffold/src/main.rs index dcb5cb5..430f60e 100644 --- a/src/bin/scaffold.rs +++ b/utils/scaffold/src/main.rs @@ -35,6 +35,11 @@ mod tests { } "#; +pub fn parse_args() -> Result { + let mut args = pico_args::Arguments::from_env(); + args.free_from_str() +} + fn safe_create_file(path: &str) -> Result { OpenOptions::new().write(true).create_new(true).open(path) } @@ -44,7 +49,7 @@ fn create_file(path: &str) -> Result { } fn main() { - let day = match aoc::parse_args() { + let day = match parse_args() { Ok(day) => day, Err(_) => { eprintln!("Need to specify a day (as integer). example: `cargo scaffold 7`");