1use thiserror::Error;
2
3#[derive(Error, Debug)]
4#[non_exhaustive]
5pub enum SpaceError {
6 #[error("{path}: {msg}")]
7 Invalid { path: String, msg: String },
8}
9
10impl SpaceError {
11 pub(crate) fn invalid(path: impl Into<String>, msg: impl Into<String>) -> Self {
13 SpaceError::Invalid {
14 path: path.into(),
15 msg: msg.into(),
16 }
17 }
18
19 #[must_use]
22 pub fn path(&self) -> &str {
23 match self {
24 SpaceError::Invalid { path, .. } => path,
25 }
26 }
27}
28
29#[derive(Error, Debug, Clone, PartialEq, Eq)]
30#[non_exhaustive]
31pub enum EnvRuntimeError {
32 #[error("invalid space: {0}")]
33 InvalidSpace(String),
34 #[error("invalid value: {0}")]
35 InvalidValue(String),
36 #[error("runtime error: {0}")]
37 Runtime(String),
38}
39
40macro_rules! err_space {
41 ($path:expr, $msg:expr) => {
43 Err(SpaceError::Invalid {
44 path: $path.into(),
45 msg: $msg.into(),
46 })
47 };
48
49 ($path:expr, $name:expr, $msg:expr) => {
51 Err(SpaceError::Invalid {
52 path: $path.into(),
53 msg: format!("[{}] {}", $name, $msg),
54 })
55 };
56}
57pub(crate) use err_space;