diff --git a/Cargo.lock b/Cargo.lock index 5b42a12..4040e03 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -173,7 +173,7 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "day-reporter" -version = "1.1.0" +version = "1.2.0" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 9eaa0d2..b3ce27c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "day-reporter" -version = "1.1.0" +version = "1.2.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/main.rs b/src/main.rs index 529d9d4..99e04d4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,20 +10,19 @@ use anyhow::Result; use clap::{Parser, ValueEnum}; #[derive(ValueEnum, Copy, Clone, Eq, PartialEq)] -enum Modes { - /// Generate a report containing projected work for the day and a morning message +enum ReportTypes { + /// report projected work for the day and a morning message Morning, - /// Generate a report that is intended to be used for sharing what major tasks were completed - /// in the last cycle. + /// report what major tasks were completed in the last cycle. Cycle, - /// Generate a report for what was actually done today and a signoff message + /// report what was actually done today and a signoff message Signoff, } -impl Modes { +impl ReportTypes { fn format_tasks(&self, tasks: Vec, tags: &Vec, sanitize_names: bool) -> String { match self { - Modes::Morning => { + ReportTypes::Morning => { let task_report = MarkdownReporter.report(tasks, &ReportOptions { resolution: Resolution::FullTask, tags: tags.to_vec(), @@ -31,7 +30,7 @@ impl Modes { }); format!("{}\n\n{}", emoji::pick(3).join(" "), task_report) }, - Modes::Signoff => { + ReportTypes::Signoff => { let task_report = MarkdownReporter.report(tasks, &ReportOptions { resolution: Resolution::FullTask, tags: tags.to_vec(), @@ -39,7 +38,7 @@ impl Modes { }); format!("Stopping now\n\n{}", task_report) }, - Modes::Cycle => { + ReportTypes::Cycle => { let further_filtered = tasks.into_iter().filter(|t| { if let Some(p) = &t.project { return p.status == Status::Completed; @@ -57,42 +56,43 @@ impl Modes { } } -impl Default for Modes { - fn default() -> Modes { - Modes::Morning +impl Default for ReportTypes { + fn default() -> ReportTypes { + ReportTypes::Morning } } +/// A program that generates Slack flavor markdown reports from Things 3 todo list items. #[derive(Parser)] #[command(author, version, about, long_about = None)] struct CliArgs { - /// A list of tags to filter requests on + /// A list of tags to filter todos by. Only todo list items with every tag will be reported #[arg(short, long)] tags: Vec, - /// Control what type of report to generate - #[arg(short, long, default_value_t = Modes::default())] + /// Select the type of report to generate + #[arg(short, long, default_value_t = ReportTypes::default())] #[clap(value_enum)] - mode: Modes, + report: ReportTypes, /// By default, any @ style tags will be sanitized in the output to avoid @-mentions in - /// slack. This is done by replacing vowel characters with look unicode lookalikes. If this - /// flag is set then the names will be passed through unsanitized + /// Slack. This is done by replacing vowel characters with unicode lookalikes. If this + /// flag is set then the names will be passed through unsanitized. #[arg(long, default_value_t = false)] no_sanitize: bool, } fn main() -> Result<()> { let args = CliArgs::parse(); - let tasks = match args.mode { - Modes::Morning => Task::today(), - Modes::Signoff => Task::logbook_today(), - Modes::Cycle => Task::logbook_this_cycle(), + let tasks = match args.report { + ReportTypes::Morning => Task::today(), + ReportTypes::Signoff => Task::logbook_today(), + ReportTypes::Cycle => Task::logbook_this_cycle(), }?; let reported: Vec = tasks.into_iter().filter(|task| { args.tags.iter().all(|tag| task.has_tag(tag)) }).collect(); - let report = args.mode.format_tasks(reported, &args.tags, !args.no_sanitize); + let report = args.report.format_tasks(reported, &args.tags, !args.no_sanitize); println!("{report}"); Ok(())