From ddc8d651696999badfb8291954a66d1978f84770 Mon Sep 17 00:00:00 2001 From: geekiot Date: Mon, 1 Dec 2025 15:25:37 +0500 Subject: [PATCH] Add: add template for notes support --- src/cli.rs | 21 +++++++++++++++++++++ src/config/config.rs | 5 +++++ src/lib.rs | 16 +++++++++++++++- src/notes/mod.rs | 3 +++ src/notes/notes.rs | 26 ++++++++++++++++++++++++++ 5 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 src/notes/mod.rs create mode 100644 src/notes/notes.rs diff --git a/src/cli.rs b/src/cli.rs index ca0701c..31f4dd7 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -25,6 +25,9 @@ pub enum Commands { /// Work with user git projects Project(ProjectsCommand), + + /// Notes for projects + Notes(NotesCommand), } #[derive(Args)] @@ -87,3 +90,21 @@ pub enum ProjectsAction { /// List of all user projects List, } + +#[derive(Args)] +pub struct NotesCommand { + #[command(subcommand)] + pub action: NotesAction, +} + +#[derive(Subcommand)] +pub enum NotesAction { + /// Add project note + Add, + + /// Remove project note + Remove, + + /// List of all project notes + List, +} diff --git a/src/config/config.rs b/src/config/config.rs index d5fbb3f..c2d130c 100644 --- a/src/config/config.rs +++ b/src/config/config.rs @@ -1,4 +1,7 @@ use serde::{Deserialize, Serialize}; + +use crate::notes::Note; + use std::path::PathBuf; #[derive(Debug, Deserialize, Serialize)] @@ -7,6 +10,7 @@ pub struct Config { pub timer_concentrate_mins: u8, pub timer_rest_mins: u8, pub projects: Vec, + pub notes: Vec, } impl Config { @@ -16,6 +20,7 @@ impl Config { timer_concentrate_mins: 45, timer_rest_mins: 15, projects: Vec::new(), + notes: Vec::new(), } } } diff --git a/src/lib.rs b/src/lib.rs index 2286d16..8218a14 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,7 @@ mod cli; mod config; mod core; mod misc; +mod notes; mod projects; mod templates; mod timer; @@ -12,7 +13,7 @@ use strfmt::strfmt; use std::collections::HashMap; use std::{fs, process}; -use cli::{CLI, Commands, PomodoroAction, ProjectsAction, TemplateAction}; +use cli::{CLI, Commands, NotesAction, PomodoroAction, ProjectsAction, TemplateAction}; use config::{Config, load_config, save_config}; use projects::{commits_info, repository_status}; use templates::{list_templates, load_template}; @@ -243,6 +244,19 @@ fn process_command(mut cfg: Config) { } } }, + Some(Commands::Notes(notes_command)) => match notes_command.action { + NotesAction::Add => { + todo!("Add notes!"); + } + NotesAction::Remove => { + todo!("Remove notes!"); + } + NotesAction::List => { + todo!("List of notes!"); + + // let notes = cfg.notes; + } + }, None => { eprintln!("No command provided. Use --help for usage."); process::exit(1); diff --git a/src/notes/mod.rs b/src/notes/mod.rs new file mode 100644 index 0000000..dadcc40 --- /dev/null +++ b/src/notes/mod.rs @@ -0,0 +1,3 @@ +mod notes; + +pub use notes::Note; diff --git a/src/notes/notes.rs b/src/notes/notes.rs new file mode 100644 index 0000000..855575b --- /dev/null +++ b/src/notes/notes.rs @@ -0,0 +1,26 @@ +use serde::{Deserialize, Serialize}; + +use std::path::PathBuf; + +#[derive(Debug, Deserialize, Serialize)] +pub struct Note { + pub project_dir: PathBuf, + pub project_note_info: NoteInfo, +} + +impl Note { + pub fn render(&self) -> String { + format!( + "{}\n\nDescription:\n{}", + self.project_note_info.name, self.project_note_info.description + ) + .to_string() + } +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct NoteInfo { + pub id: u8, + pub name: String, + pub description: String, +}