#[derive(Debug)]
pub enum RosaceError {
NotFound { resource: &'static str },
InvalidState(String),
LayoutError(String),
Internal(String),
}
impl RosaceError {
pub fn not_found(resource: &'static str) -> Self {
RosaceError::NotFound { resource }
}
pub fn internal(msg: impl Into<String>) -> Self {
RosaceError::Internal(msg.into())
}
}
impl std::fmt::Display for RosaceError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
RosaceError::NotFound { resource } => write!(f, "resource not found: {resource}"),
RosaceError::InvalidState(msg) => write!(f, "invalid state: {msg}"),
RosaceError::LayoutError(msg) => write!(f, "layout error: {msg}"),
RosaceError::Internal(msg) => write!(f, "internal error: {msg}"),
}
}
}
impl std::error::Error for RosaceError {}
pub type RosaceResult<T> = Result<T, RosaceError>;