From 00000270a3f8055e17367606f013a809aca2a0fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Jane=C5=BEi=C4=8D?= Date: Sat, 18 Nov 2023 19:31:44 +0100 Subject: [PATCH] feat!: prune main and download_all and remove tokio dep --- Cargo.lock | 158 ++++------------------------------------ Cargo.toml | 6 +- src/bin/download.rs | 8 +- src/bin/download_all.rs | 57 --------------- src/bin/scaffold.rs | 4 +- src/lib.rs | 72 ------------------ src/main.rs | 43 ----------- 7 files changed, 22 insertions(+), 326 deletions(-) delete mode 100644 src/bin/download_all.rs delete mode 100644 src/main.rs diff --git a/Cargo.lock b/Cargo.lock index 127dcb2..95d3864 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,7 +45,7 @@ checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" [[package]] name = "aoc" -version = "26.0.0" +version = "27.0.0" dependencies = [ "dotenvy", "elves", @@ -56,7 +56,6 @@ dependencies = [ "pico-args", "regex", "reqwest", - "tokio", ] [[package]] @@ -218,6 +217,12 @@ version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" +[[package]] +name = "futures-io" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" + [[package]] name = "futures-sink" version = "0.3.25" @@ -237,9 +242,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" dependencies = [ "futures-core", + "futures-io", "futures-task", + "memchr", "pin-project-lite", "pin-utils", + "slab", ] [[package]] @@ -458,16 +466,6 @@ version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - [[package]] name = "log" version = "0.4.17" @@ -575,7 +573,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn", ] [[package]] @@ -597,29 +595,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-sys 0.42.0", -] - [[package]] name = "percent-encoding" version = "2.2.0" @@ -775,12 +750,6 @@ dependencies = [ "windows-sys 0.36.1", ] -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - [[package]] name = "security-framework" version = "2.7.0" @@ -833,15 +802,6 @@ dependencies = [ "serde", ] -[[package]] -name = "signal-hook-registry" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" -dependencies = [ - "libc", -] - [[package]] name = "slab" version = "0.4.7" @@ -851,12 +811,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - [[package]] name = "socket2" version = "0.4.7" @@ -888,17 +842,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "syn" -version = "2.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "system-configuration" version = "0.5.1" @@ -960,25 +903,11 @@ dependencies = [ "libc", "mio", "num_cpus", - "parking_lot", "pin-project-lite", - "signal-hook-registry", "socket2 0.5.5", - "tokio-macros", "windows-sys 0.48.0", ] -[[package]] -name = "tokio-macros" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.39", -] - [[package]] name = "tokio-native-tls" version = "0.3.0" @@ -1116,7 +1045,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 1.0.107", + "syn", "wasm-bindgen-shared", ] @@ -1150,7 +1079,7 @@ checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", - "syn 1.0.107", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1206,21 +1135,6 @@ dependencies = [ "windows_x86_64_msvc 0.36.1", ] -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.0", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", - "windows_x86_64_gnullvm 0.42.0", - "windows_x86_64_msvc 0.42.0", -] - [[package]] name = "windows-sys" version = "0.48.0" @@ -1236,21 +1150,15 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_gnullvm", "windows_aarch64_msvc 0.48.5", "windows_i686_gnu 0.48.5", "windows_i686_msvc 0.48.5", "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_gnullvm", "windows_x86_64_msvc 0.48.5", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" - [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -1263,12 +1171,6 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" - [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -1281,12 +1183,6 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" -[[package]] -name = "windows_i686_gnu" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" - [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -1299,12 +1195,6 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" -[[package]] -name = "windows_i686_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" - [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -1317,24 +1207,12 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" - [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" - [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -1347,12 +1225,6 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" - [[package]] name = "windows_x86_64_msvc" version = "0.48.5" diff --git a/Cargo.toml b/Cargo.toml index b969be5..93d7ae3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,12 +2,11 @@ name = "aoc" description = "template for advent of code" readme = "README.md" -version = "26.0.0" +version = "27.0.0" edition = "2021" license = "MIT" authors = ["Matej JaneΕΎič "] repository = "https://github.com/janezicmatej/aoc-template.git" -default-run = "aoc" [dependencies] dotenvy = "0.15.6" @@ -18,5 +17,4 @@ itertools = "0.12.0" lazy_static = "1.4.0" pico-args = "0.5.0" regex = "1.10.2" -reqwest = "0.11.22" -tokio = { version = "1.34.0", features = ["full"] } +reqwest = { version = "0.11.22", features = ["blocking"] } diff --git a/src/bin/download.rs b/src/bin/download.rs index 51f3ad1..0771c6b 100644 --- a/src/bin/download.rs +++ b/src/bin/download.rs @@ -1,9 +1,9 @@ use dotenvy::dotenv; -use reqwest::{header, Client}; +use reqwest::blocking::Client; +use reqwest::header; use std::{env, fs::OpenOptions, io::Write, process}; -#[tokio::main] -async fn main() { +fn main() { let day: u8 = match aoc::parse_args() { Ok(day) => day, Err(_) => { @@ -30,10 +30,8 @@ async fn main() { let res = client .get(format!("https://adventofcode.com/{year}/day/{day}/input")) .send() - .await .unwrap() .text() - .await .unwrap(); let input_path = format!("src/inputs/{day_padded}.txt"); diff --git a/src/bin/download_all.rs b/src/bin/download_all.rs deleted file mode 100644 index 0166db3..000000000 --- a/src/bin/download_all.rs +++ /dev/null @@ -1,57 +0,0 @@ -use dotenvy::dotenv; -use itertools::Itertools; -use reqwest::{header, Client}; -use std::{env, fs::OpenOptions, io::Write, process}; - -#[tokio::main] -async fn main() { - dotenv().ok(); - let token = env::var("TOKEN").expect("$TOKEN is not set"); - let year = env::var("YEAR") - .expect("$YEAR is not set") - .parse::() - .expect("$YEAR must be a number"); - - let mut headers = header::HeaderMap::new(); - let mut session_header = header::HeaderValue::from_str(format!("session={token}").as_str()) - .expect("Error building cookie header"); - session_header.set_sensitive(true); - headers.insert(header::COOKIE, session_header); - - let client = Client::builder().default_headers(headers).build().unwrap(); - let responses = (1..=25) - .map(|d| { - let endpoint = format!("https://adventofcode.com/{year}/day/{d}/input"); - println!("{endpoint}"); - client.get(endpoint).send() - }) - .collect_vec() - .into_iter() - .map(|x| async { x.await.unwrap().text().await.unwrap() }) - .collect_vec(); - - for (day, res) in (1..=25).zip(responses) { - let input_path = format!("src/inputs/{day:02}.txt"); - let mut file = match OpenOptions::new() - .write(true) - .create(true) - .open(&input_path) - { - Ok(file) => file, - Err(e) => { - eprintln!("Failed to create module file: {e}"); - process::exit(1); - } - }; - - match file.write_all(res.await.as_bytes()) { - Ok(_) => { - println!("Downloaded input file \"{}\"", &input_path); - } - Err(e) => { - eprintln!("Failed to write module contents: {e}"); - process::exit(1); - } - } - } -} diff --git a/src/bin/scaffold.rs b/src/bin/scaffold.rs index ab5a6b0..7ca609d 100644 --- a/src/bin/scaffold.rs +++ b/src/bin/scaffold.rs @@ -8,7 +8,7 @@ use std::{ process, }; -const MODULE_TEMPLATE: &str = r###"pub fn part_one(input: &str) -> Option { +const MODULE_TEMPLATE: &str = r#"pub fn part_one(input: &str) -> Option { None } pub fn part_two(input: &str) -> Option { @@ -33,7 +33,7 @@ mod tests { assert_eq!(part_two(&input), None); } } -"###; +"#; fn safe_create_file(path: &str) -> Result { OpenOptions::new().write(true).create_new(true).open(path) diff --git a/src/lib.rs b/src/lib.rs index ac7d221..5fa41e8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -48,80 +48,8 @@ pub fn read_file(folder: &str, day: u8) -> String { f.expect("could not open input file") } -fn parse_time(val: &str, postfix: &str) -> f64 { - val.split(postfix).next().unwrap().parse().unwrap() -} - pub fn parse_args() -> Result { let mut args = pico_args::Arguments::from_env(); args.free_from_str() } -pub fn parse_exec_time(output: &str) -> f64 { - output.lines().fold(0_f64, |acc, l| { - if !l.contains("elapsed:") { - acc - } else { - let timing = l.split("(elapsed: ").last().unwrap(); - // use `contains` istd. of `ends_with`: string may contain ANSI escape sequences. - // for possible time formats, see: https://github.com/rust-lang/rust/blob/1.64.0/library/core/src/time.rs#L1176-L1200 - if timing.contains("ns)") { - acc // range below rounding precision. - } else if timing.contains("Β΅s)") { - acc + parse_time(timing, "Β΅s") / 1000_f64 - } else if timing.contains("ms)") { - acc + parse_time(timing, "ms") - } else if timing.contains("s)") { - acc + parse_time(timing, "s") * 1000_f64 - } else { - acc - } - } - }) -} - -/// copied from: https://github.com/rust-lang/rust/blob/1.64.0/library/std/src/macros.rs#L328-L333 -#[cfg(test)] -macro_rules! assert_approx_eq { - ($a:expr, $b:expr) => {{ - let (a, b) = (&$a, &$b); - assert!( - (*a - *b).abs() < 1.0e-6, - "{} is not approximately equal to {}", - *a, - *b - ); - }}; -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_parse_exec_time() { - assert_approx_eq!( - parse_exec_time(&format!( - "πŸŽ„ Part 1 πŸŽ„\n0 (elapsed: 74.13ns){ANSI_RESET}\nπŸŽ„ Part 2 πŸŽ„\n0 (elapsed: 50.00ns){ANSI_RESET}" - )), - 0_f64 - ); - - assert_approx_eq!( - parse_exec_time("πŸŽ„ Part 1 πŸŽ„\n0 (elapsed: 755Β΅s)\nπŸŽ„ Part 2 πŸŽ„\n0 (elapsed: 700Β΅s)"), - 1.455_f64 - ); - - assert_approx_eq!( - parse_exec_time("πŸŽ„ Part 1 πŸŽ„\n0 (elapsed: 70Β΅s)\nπŸŽ„ Part 2 πŸŽ„\n0 (elapsed: 1.45ms)"), - 1.52_f64 - ); - - assert_approx_eq!( - parse_exec_time( - "πŸŽ„ Part 1 πŸŽ„\n0 (elapsed: 10.3s)\nπŸŽ„ Part 2 πŸŽ„\n0 (elapsed: 100.50ms)" - ), - 10400.50_f64 - ); - } -} diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 45bca4c..000000000 --- a/src/main.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This file contains template code. - * There is no need to edit this file unless you want to change template functionality. - */ -use aoc::{ANSI_BOLD, ANSI_ITALIC, ANSI_RESET}; -use std::process::Command; - -fn main() { - let total: f64 = (1..=25) - .map(|day| { - let day = format!("{day:02}"); - - let cmd = Command::new("cargo") - .args(["run", "--release", "--bin", &day]) - .output() - .unwrap(); - - println!("----------"); - println!("{ANSI_BOLD}| Day {day} |{ANSI_RESET}"); - println!("----------"); - - let output = String::from_utf8(cmd.stdout).unwrap(); - let is_empty = output.is_empty(); - - println!( - "{}", - if is_empty { - "Not solved." - } else { - output.trim() - } - ); - - if is_empty { - 0_f64 - } else { - aoc::parse_exec_time(&output) - } - }) - .sum(); - - println!("{ANSI_BOLD}Total:{ANSI_RESET} {ANSI_ITALIC}{total:.2}ms{ANSI_RESET}"); -}