use std::{io, path::PathBuf};
#[derive(thiserror::Error, Debug)]
pub enum CoreError {
#[error("I/O error while accessing {0}")]
Io(PathBuf, #[source] io::Error),
#[error("invalid path: {0}")]
InvalidPath(String),
#[error("missing required value: {0}")]
MissingValue(String),
#[error("invalid command input: {0}")]
InvalidInput(String),
#[error("pre-condition failed: {0}")]
PreconditionFailed(String),
#[error("resource conflict: {0}")]
Conflict(String),
#[error("unsupported platform behavior: {0}")]
UnsupportedPlatform(String),
}
impl CoreError {
pub fn invalid_input(message: impl Into<String>) -> Self {
Self::InvalidInput(message.into())
}
pub fn missing(message: impl Into<String>) -> Self {
Self::MissingValue(message.into())
}
pub fn conflict(message: impl Into<String>) -> Self {
Self::Conflict(message.into())
}
pub fn io(path: impl Into<PathBuf>, error: io::Error) -> Self {
Self::Io(path.into(), error)
}
}
pub type Result<T> = std::result::Result<T, CoreError>;