70 lines
1.8 KiB
Rust
70 lines
1.8 KiB
Rust
use std::{
|
|
fs::{File, OpenOptions},
|
|
io::Write,
|
|
process,
|
|
};
|
|
|
|
use crate::template::Day;
|
|
|
|
const MODULE_TEMPLATE: &str =
|
|
include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/template.txt"));
|
|
|
|
fn safe_create_file(path: &str) -> Result<File, std::io::Error> {
|
|
OpenOptions::new().write(true).create_new(true).open(path)
|
|
}
|
|
|
|
fn create_file(path: &str) -> Result<File, std::io::Error> {
|
|
OpenOptions::new().write(true).create(true).open(path)
|
|
}
|
|
|
|
pub fn handle(day: Day) {
|
|
let input_path = format!("data/inputs/{day}.txt");
|
|
let example_path = format!("data/examples/{day}.txt");
|
|
let module_path = format!("src/bin/{day}.rs");
|
|
|
|
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_NUMBER%", &day.into_inner().to_string())
|
|
.as_bytes(),
|
|
) {
|
|
Ok(()) => {
|
|
println!("Created module file \"{}\"", &module_path);
|
|
}
|
|
Err(e) => {
|
|
eprintln!("Failed to write module contents: {e}");
|
|
process::exit(1);
|
|
}
|
|
}
|
|
|
|
match 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 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 solve {day}` to run your solution.");
|
|
}
|