diaryrs/src/main.rs

81 lines
2.4 KiB
Rust
Raw Normal View History

2024-12-25 09:38:38 +00:00
mod args;
use args::{Args, Config};
use clap::Parser;
use diaryrs::{macros::UnwrapOrFatalAble, time::Time};
use indoc::formatdoc;
use std::fs;
use std::io::prelude::*;
fn main() {
let args = Args::parse();
match args.cmd {
args::Commands::Info => {
let time = Time::build().unwrap_or_fatal("Failed to determine time information");
let config = Config::read().unwrap_or_fatal("Failed to read config file");
println!(
"[TIME] Timestamp: {}, Timezone: {}",
time.timestamp, time.timezone
);
println!("[CONFIG] {:?}", config);
}
args::Commands::Today => {
let time = Time::build().unwrap_or_fatal("Failed to determine time information");
let config = Config::read().unwrap_or_fatal("Failed to read config file");
let entry = fmt_entry(&time);
// Create folder for day (YYYY-MM-DD)
let year = time.datetime.format("%Y").to_string();
let month = time.datetime.format("%m").to_string();
let month_name = time.datetime.format("%B").to_string();
let day = time.datetime.format("%d").to_string();
let ymd = format!("{}-{}-{}", year, month, day);
let dir_path = config
.base_path
.join(&year)
.join(&month_name)
.join(&ymd);
fs::create_dir_all(&dir_path)
.unwrap_or_fatal("Failed to create directory for today's entry");
// Write entry to file if not exists
let file_path = dir_path.join(format!("{ymd}.md"));
let mut file_handle = fs::OpenOptions::new()
.write(true)
.create_new(true)
.open(file_path)
.unwrap_or_fatal("Error opening today's entry for writing!");
match file_handle.write(entry.as_bytes()) {
Ok(_) => println!("Successfully wrote diary entry for {ymd}. Happy journaling!"),
Err(e) => eprintln!("Error: Failed to write diary entry: {e}"),
};
}
}
}
fn fmt_entry(time: &Time) -> String {
let yaml = formatdoc!(
r#"
---
timestamp: "{}"
timezone: "{}"
---"#,
time.timestamp,
time.timezone
);
formatdoc!(
"
{}
# Dreams
# Entry
Dear Diary,
",
yaml
)
}