102 lines
2.5 KiB
Rust
102 lines
2.5 KiB
Rust
|
use std::{
|
||
|
fs::{File, OpenOptions},
|
||
|
io::Write,
|
||
|
process,
|
||
|
};
|
||
|
|
||
|
const MODULE_TEMPLATE: &str = r###"pub fn part_one(input: &str) -> u32 {
|
||
|
0
|
||
|
}
|
||
|
|
||
|
pub fn part_two(input: &str) -> u32 {
|
||
|
0
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
aoc::solve!(&aoc::read_file("inputs", DAY), part_one, part_two)
|
||
|
}
|
||
|
|
||
|
#[cfg(test)]
|
||
|
mod tests {
|
||
|
use super::*;
|
||
|
#[test]
|
||
|
fn test_part_one() {
|
||
|
use aoc::read_file;
|
||
|
let input = read_file("examples", DAY);
|
||
|
assert_eq!(part_one(&input), 0);
|
||
|
}
|
||
|
#[test]
|
||
|
fn test_part_two() {
|
||
|
use aoc::read_file;
|
||
|
let input = read_file("examples", DAY);
|
||
|
assert_eq!(part_two(&input), 0);
|
||
|
}
|
||
|
}
|
||
|
"###;
|
||
|
|
||
|
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)
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
let day = match parse_args() {
|
||
|
Ok(day) => day,
|
||
|
Err(_) => {
|
||
|
eprintln!("Need to specify a day (as integer). example: `cargo scaffold 7`");
|
||
|
process::exit(1);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
let day_padded = format!("{:02}", day);
|
||
|
|
||
|
let input_path = format!("src/inputs/{}.txt", day);
|
||
|
let example_path = format!("src/examples/{}.txt", day);
|
||
|
let module_path = format!("src/bin/{}.rs", day);
|
||
|
|
||
|
let mut file = match safe_create_file(&module_path) {
|
||
|
Ok(file) => file,
|
||
|
Err(e) => {
|
||
|
eprintln!("Failed to create module file: {}", e);
|
||
|
process::exit(1);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
match file.write_all(MODULE_TEMPLATE.replace("DAY", &day_padded).as_bytes()) {
|
||
|
Ok(_) => {
|
||
|
println!("Created module file \"{}\"", &module_path);
|
||
|
}
|
||
|
Err(e) => {
|
||
|
eprintln!("Failed to write module contents: {}", e);
|
||
|
process::exit(1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
match safe_create_file(&input_path) {
|
||
|
Ok(_) => {
|
||
|
println!("Created empty input file \"{}\"", &input_path);
|
||
|
}
|
||
|
Err(e) => {
|
||
|
eprintln!("Failed to create input file: {}", e);
|
||
|
process::exit(1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
match safe_create_file(&example_path) {
|
||
|
Ok(_) => {
|
||
|
println!("Created empty example file \"{}\"", &example_path);
|
||
|
}
|
||
|
Err(e) => {
|
||
|
eprintln!("Failed to create example file: {}", e);
|
||
|
process::exit(1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
println!("---");
|
||
|
println!("🎄 Type `cargo run --bin {}` to run your solution.", &day);
|
||
|
}
|