use thiserror::Error;
#[derive(Error, Debug)]
#[non_exhaustive]
pub enum SpaceError {
#[error("{path}: {msg}")]
Invalid { path: String, msg: String },
}
impl SpaceError {
pub(crate) fn invalid(path: impl Into<String>, msg: impl Into<String>) -> Self {
SpaceError::Invalid {
path: path.into(),
msg: msg.into(),
}
}
#[must_use]
pub fn path(&self) -> &str {
match self {
SpaceError::Invalid { path, .. } => path,
}
}
}
#[derive(Error, Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub enum EnvRuntimeError {
#[error("invalid space: {0}")]
InvalidSpace(String),
#[error("invalid value: {0}")]
InvalidValue(String),
#[error("runtime error: {0}")]
Runtime(String),
}
macro_rules! err_space {
($path:expr, $msg:expr) => {
Err(SpaceError::Invalid {
path: $path.into(),
msg: $msg.into(),
})
};
($path:expr, $name:expr, $msg:expr) => {
Err(SpaceError::Invalid {
path: $path.into(),
msg: format!("[{}] {}", $name, $msg),
})
};
}
pub(crate) use err_space;