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.
This commit is contained in:
Matej Janezic 2023-11-20 15:44:14 +01:00
parent 0000029068
commit 0000030033
Signed by: janezicmatej
GPG Key ID: 4298E230ED37B2C0
8 changed files with 84 additions and 35 deletions

View File

@ -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"

32
Cargo.lock generated
View File

@ -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"

View File

@ -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č <janezic.mj@gmail.com>"]
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"] }

View File

@ -48,7 +48,3 @@ pub fn read_file(folder: &str, day: u8) -> String {
f.expect("could not open input file").trim().to_string()
}
pub fn parse_args() -> Result<u8, pico_args::Error> {
let mut args = pico_args::Arguments::from_env();
args.free_from_str()
}

14
utils/download/Cargo.toml Normal file
View File

@ -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"

View File

@ -3,8 +3,13 @@ use reqwest::blocking::Client;
use reqwest::header;
use std::{env, fs::OpenOptions, io::Write, process};
pub fn parse_args() -> Result<u8, pico_args::Error> {
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`");

14
utils/scaffold/Cargo.toml Normal file
View File

@ -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"

View File

@ -35,6 +35,11 @@ mod tests {
}
"#;
pub fn parse_args() -> Result<u8, pico_args::Error> {
let mut args = pico_args::Arguments::from_env();
args.free_from_str()
}
fn safe_create_file(path: &str) -> Result<File, std::io::Error> {
OpenOptions::new().write(true).create_new(true).open(path)
}
@ -44,7 +49,7 @@ fn create_file(path: &str) -> Result<File, std::io::Error> {
}
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`");