use thiserror::Error;
#[derive(Debug, Error)]
pub enum CollaborationError {
#[error("pull request not found: {repo_key}#{number}")]
PullRequestNotFound { repo_key: String, number: u32 },
#[error("issue not found: {repo_key}#{number}")]
IssueNotFound { repo_key: String, number: u32 },
#[error("comment not found: {id}")]
CommentNotFound { id: u64 },
#[error("review not found: {id}")]
ReviewNotFound { id: u64 },
#[error("pull request already exists: {repo_key}#{number}")]
PullRequestExists { repo_key: String, number: u32 },
#[error("issue already exists: {repo_key}#{number}")]
IssueExists { repo_key: String, number: u32 },
#[error("invalid state transition: cannot {action} when state is {current_state}")]
InvalidStateTransition {
action: String,
current_state: String,
},
#[error("pull request already merged: {repo_key}#{number}")]
AlreadyMerged { repo_key: String, number: u32 },
#[error("pull request is closed: {repo_key}#{number}")]
PullRequestClosed { repo_key: String, number: u32 },
#[error("issue is closed: {repo_key}#{number}")]
IssueClosed { repo_key: String, number: u32 },
#[error("repository not found: {repo_key}")]
RepoNotFound { repo_key: String },
#[error("validation error: {0}")]
Validation(String),
#[error("serialization error: {0}")]
Serialization(#[from] serde_json::Error),
}