use std::path::PathBuf;
use thiserror::Error;
pub type Result<T> = std::result::Result<T, LsPlusError>;
#[derive(Error, Debug)]
pub enum LsPlusError {
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("Path not found: {path}")]
PathNotFound { path: PathBuf },
#[error("Permission denied: {path}")]
PermissionDenied { path: PathBuf },
#[error("Invalid configuration: {message}")]
InvalidConfig { message: String },
#[error("Configuration file error: {0}")]
ConfigFile(#[from] toml::de::Error),
#[error("JSON serialization error: {0}")]
JsonSerialization(#[from] serde_json::Error),
#[error("Git error: {message}")]
Git { message: String },
#[error("Pattern matching error: {pattern}")]
PatternError { pattern: String },
#[error("Format error: {message}")]
Format { message: String },
#[error("System error: {message}")]
System { message: String },
}
impl LsPlusError {
pub fn path_not_found(path: PathBuf) -> Self {
Self::PathNotFound { path }
}
pub fn permission_denied(path: PathBuf) -> Self {
Self::PermissionDenied { path }
}
pub fn invalid_config<S: Into<String>>(message: S) -> Self {
Self::InvalidConfig {
message: message.into(),
}
}
pub fn git_error<S: Into<String>>(message: S) -> Self {
Self::Git {
message: message.into(),
}
}
pub fn pattern_error<S: Into<String>>(pattern: S) -> Self {
Self::PatternError {
pattern: pattern.into(),
}
}
pub fn format_error<S: Into<String>>(message: S) -> Self {
Self::Format {
message: message.into(),
}
}
pub fn system_error<S: Into<String>>(message: S) -> Self {
Self::System {
message: message.into(),
}
}
}