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:
parent
00000290bf
commit
0000030019
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
33
Cargo.toml
33
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č <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"] }
|
||||
|
|
|
@ -8,19 +8,18 @@
|
|||
- `src/` :
|
||||
- `bin/`:
|
||||
- `<day>.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 <day>`: prepare solution files for `day`
|
||||
- `cargo download <day>`: download input file for `day`
|
||||
- `cargo solve <day>`: run solution against input for `day`
|
||||
|
||||
|
||||
### dotenv
|
||||
|
||||
set `YEAR` to whichever year you are solving for and `TOKEN` to AoC session Cookie
|
||||
|
|
|
@ -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<u8, pico_args::Error> {
|
||||
let mut args = pico_args::Arguments::from_env();
|
||||
args.free_from_str()
|
||||
}
|
||||
|
|
|
@ -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"
|
|
@ -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`");
|
|
@ -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"
|
|
@ -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`");
|
Loading…
Reference in New Issue