2026-02-09 20:55:40 +01:00
|
|
|
use crate::commit::types::{CommitMessageError, DescriptionError, ScopeError};
|
|
|
|
|
|
2026-03-07 00:53:13 +01:00
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
|
2026-02-05 19:37:36 +01:00
|
|
|
pub enum Error {
|
|
|
|
|
// Domain errors
|
|
|
|
|
#[error("Invalid scope: {0}")]
|
|
|
|
|
InvalidScope(String),
|
|
|
|
|
#[error("Invalid description: {0}")]
|
|
|
|
|
InvalidDescription(String),
|
2026-02-09 20:55:40 +01:00
|
|
|
#[error("Invalid commit message: {0}")]
|
|
|
|
|
InvalidCommitMessage(String),
|
2026-02-05 19:37:36 +01:00
|
|
|
// Infrastructure errors
|
|
|
|
|
#[error("Not a Jujutsu repository")]
|
|
|
|
|
NotARepository,
|
2026-02-09 20:55:40 +01:00
|
|
|
#[error("Repository operation failed: {context}")]
|
|
|
|
|
JjOperation { context: String },
|
|
|
|
|
#[error("Repository is locked by another process")]
|
|
|
|
|
RepositoryLocked,
|
2026-02-09 20:55:40 +01:00
|
|
|
#[error("Could not get current directory")]
|
|
|
|
|
FailedGettingCurrentDir,
|
|
|
|
|
#[error("Could not load Jujutsu configuration")]
|
|
|
|
|
FailedReadingConfig,
|
2026-02-05 19:37:36 +01:00
|
|
|
// Application errors
|
|
|
|
|
#[error("Operation cancelled by user")]
|
|
|
|
|
Cancelled,
|
|
|
|
|
#[error("Non-interactive terminal detected")]
|
2026-02-05 20:34:57 +01:00
|
|
|
NonInteractive,
|
2026-02-05 19:37:36 +01:00
|
|
|
}
|
2026-02-09 20:55:40 +01:00
|
|
|
|
|
|
|
|
impl From<ScopeError> for Error {
|
|
|
|
|
fn from(value: ScopeError) -> Self {
|
|
|
|
|
Self::InvalidScope(value.to_string())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl From<DescriptionError> for Error {
|
|
|
|
|
fn from(value: DescriptionError) -> Self {
|
|
|
|
|
Self::InvalidDescription(value.to_string())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl From<CommitMessageError> for Error {
|
|
|
|
|
fn from(value: CommitMessageError) -> Self {
|
|
|
|
|
Self::InvalidCommitMessage(value.to_string())
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-02-09 20:55:40 +01:00
|
|
|
|
|
|
|
|
impl From<std::io::Error> for Error {
|
|
|
|
|
fn from(_value: std::io::Error) -> Self {
|
|
|
|
|
Self::FailedGettingCurrentDir
|
|
|
|
|
}
|
|
|
|
|
}
|