use std::fmt::Display;
#[derive(Debug)]
pub enum WHError {
DatabaseConnectionError(String),
AliasNotFound(String),
AliasAlreadyExists(String),
PathOfAliasNotExist(String, String),
PatternNotMatch(String),
}
impl Display for WHError {
#[rustfmt::skip]
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
WHError::DatabaseConnectionError(path) => write!(f, "Error connecting to database at {}", path),
WHError::AliasNotFound(alias) => write!(f, "Alias {} does not exist", alias),
WHError::AliasAlreadyExists(alias) => write!(f, "Cannot create alias {} because it already exists", alias),
WHError::PathOfAliasNotExist(alias, path) => write!(f, "The path {} does no longer exist\nRun `wormhole rm {}` to remove the alias or `wormhole edit {} <new_path>` to update the path", path, alias, alias),
WHError::PatternNotMatch(pattern) => write!(f, "The pattern {} does not match anything", pattern),
}
}
}
pub type WHResult<T> = std::result::Result<T, WHError>;
pub fn unwrap_worm_hole_error<T>(result: WHResult<T>) -> T {
match result {
Ok(value) => value,
Err(error) => {
eprintln!("{}", error);
std::process::exit(1);
}
}
}