oh-my-todo 0.2.0

Local-first terminal task manager with a mouse-first TUI and CLI.
Documentation
use crate::domain::TaskId;
use thiserror::Error;

#[derive(Debug, Error, Clone, PartialEq, Eq)]
pub enum ValidationError {
    #[error("task title cannot be empty")]
    EmptyTaskTitle,
    #[error("space name cannot be empty")]
    EmptySpaceName,
    #[error("task `{task_id}` cannot be its own parent")]
    SelfParent { task_id: TaskId },
}

pub fn ensure_non_empty_title(title: &str) -> Result<(), ValidationError> {
    if title.trim().is_empty() {
        Err(ValidationError::EmptyTaskTitle)
    } else {
        Ok(())
    }
}

pub fn ensure_non_empty_space_name(name: &str) -> Result<(), ValidationError> {
    if name.trim().is_empty() {
        Err(ValidationError::EmptySpaceName)
    } else {
        Ok(())
    }
}

pub fn ensure_not_self_parent(task_id: &TaskId, parent_id: &TaskId) -> Result<(), ValidationError> {
    if task_id == parent_id {
        Err(ValidationError::SelfParent {
            task_id: task_id.clone(),
        })
    } else {
        Ok(())
    }
}