feat: add --submit <part> option to cargo solve (#25)

* remove `--year` flag in favor of `.config/config.toml`
* cleanup option handling for `cargo solve`
This commit is contained in:
Felix Spöttel
2023-10-21 14:46:19 +02:00
committed by GitHub
parent 1c8ea27eae
commit d10ec0573e
7 changed files with 145 additions and 29 deletions

View File

@@ -7,14 +7,12 @@ use std::process;
struct Args {
day: u8,
year: Option<u16>,
}
fn parse_args() -> Result<Args, pico_args::Error> {
let mut args = pico_args::Arguments::from_env();
Ok(Args {
day: args.free_from_str()?,
year: args.opt_value_from_str(["-y", "--year"])?,
})
}
@@ -32,7 +30,7 @@ fn main() {
process::exit(1);
}
match aoc_cli::download(args.day, args.year) {
match aoc_cli::download(args.day) {
Ok(cmd_output) => {
if !cmd_output.status.success() {
process::exit(1);

View File

@@ -7,14 +7,12 @@ use std::process;
struct Args {
day: u8,
year: Option<u16>,
}
fn parse_args() -> Result<Args, pico_args::Error> {
let mut args = pico_args::Arguments::from_env();
Ok(Args {
day: args.free_from_str()?,
year: args.opt_value_from_str(["-y", "--year"])?,
})
}
@@ -32,7 +30,7 @@ fn main() {
process::exit(1);
}
match aoc_cli::read(args.day, args.year) {
match aoc_cli::read(args.day) {
Ok(cmd_output) => {
if !cmd_output.status.success() {
process::exit(1);

View File

@@ -8,7 +8,7 @@ use std::{
process,
};
const MODULE_TEMPLATE: &str = r###"pub fn part_one(input: &str) -> Option<u32> {
const MODULE_TEMPLATE: &str = r#"pub fn part_one(input: &str) -> Option<u32> {
None
}
@@ -18,8 +18,8 @@ pub fn part_two(input: &str) -> Option<u32> {
fn main() {
let input = &advent_of_code::read_file("inputs", DAY);
advent_of_code::solve!(1, part_one, input);
advent_of_code::solve!(2, part_two, input);
advent_of_code::solve!(DAY, 1, part_one, input);
advent_of_code::solve!(DAY, 2, part_two, input);
}
#[cfg(test)]
@@ -38,7 +38,7 @@ mod tests {
assert_eq!(part_two(&input), None);
}
}
"###;
"#;
fn parse_args() -> Result<u8, pico_args::Error> {
let mut args = pico_args::Arguments::from_env();

58
src/bin/solve.rs Normal file
View File

@@ -0,0 +1,58 @@
/*
* This file contains template code.
* There is no need to edit this file unless you want to change template functionality.
*/
use std::process::{self, Command, Stdio};
struct Args {
day: u8,
release: bool,
submit: Option<u8>,
}
fn parse_args() -> Result<Args, pico_args::Error> {
let mut args = pico_args::Arguments::from_env();
Ok(Args {
day: args.free_from_str()?,
release: args.contains("--release"),
submit: args.opt_value_from_str("--submit")?,
})
}
fn run_solution(day: u8, release: bool, submit_part: Option<u8>) -> Result<(), std::io::Error> {
let day_padded = format!("{:02}", day);
let mut cmd_args = vec!["run".to_string(), "--bin".to_string(), day_padded];
if release {
cmd_args.push("--release".to_string());
}
if let Some(submit_part) = submit_part {
cmd_args.push("--".to_string());
cmd_args.push("--submit".to_string());
cmd_args.push(submit_part.to_string())
}
let mut cmd = Command::new("cargo")
.args(&cmd_args)
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.spawn()?;
cmd.wait()?;
Ok(())
}
fn main() {
let args = match parse_args() {
Ok(args) => args,
Err(e) => {
eprintln!("Failed to process arguments: {}", e);
process::exit(1);
}
};
run_solution(args.day, args.release, args.submit).unwrap();
}