use crate::commit::types::{CommitMessageError, DescriptionError, ScopeError}; #[derive(Debug, thiserror::Error)] pub enum Error { // Domain errors #[error("Invalid scope: {0}")] InvalidScope(String), #[error("Invalid description: {0}")] InvalidDescription(String), #[error("Invalid commit message: {0}")] InvalidCommitMessage(String), // Infrastructure errors #[error("Not a Jujutsu repository")] NotARepository, #[error("Repository operation failed: {context}")] JjOperation { context: String }, #[error("Repository is locked by another process")] RepositoryLocked, #[error("Could not get current directory")] FailedGettingCurrentDir, #[error("Could not load Jujutsu configuration")] FailedReadingConfig, // Application errors #[error("Operation cancelled by user")] Cancelled, #[error("Non-interactive terminal detected")] NonInteractive, } impl From for Error { fn from(value: ScopeError) -> Self { Self::InvalidScope(value.to_string()) } } impl From for Error { fn from(value: DescriptionError) -> Self { Self::InvalidDescription(value.to_string()) } } impl From for Error { fn from(value: CommitMessageError) -> Self { Self::InvalidCommitMessage(value.to_string()) } } impl From for Error { fn from(_value: std::io::Error) -> Self { Self::FailedGettingCurrentDir } } impl From for Error { fn from(_: jj_lib::config::ConfigGetError) -> Self { Self::FailedReadingConfig } }