tododo 0.1.2

A minimal terminal todo manager built with Rust and Ratatui
Documentation
pub mod priority;
pub mod todo;
pub mod service;
pub mod validation;

pub use service::TodoService;

/// Status of a todo item - domain concept
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum TodoStatus {
    Pending,
    Completed,
}

impl TodoStatus {
    pub const PENDING: &'static str = "pending";
    pub const COMPLETED: &'static str = "completed";

    pub fn as_str(&self) -> &'static str {
        match self {
            TodoStatus::Pending => Self::PENDING,
            TodoStatus::Completed => Self::COMPLETED,
        }
    }

    pub fn from_status_str(s: &str) -> Option<Self> {
        match s {
            Self::PENDING => Some(TodoStatus::Pending),
            Self::COMPLETED => Some(TodoStatus::Completed),
            _ => None,
        }
    }
}

/// SortMode is a domain concept - sorting strategy for todo lists
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum SortMode {
    #[default]
    Priority,
    CreatedAt,
}

impl SortMode {
    pub fn toggle(&mut self) {
        *self = match self {
            SortMode::Priority => SortMode::CreatedAt,
            SortMode::CreatedAt => SortMode::Priority,
        };
    }

    pub fn label(&self) -> &'static str {
        match self {
            SortMode::Priority => "priority",
            SortMode::CreatedAt => "created",
        }
    }
}