Initial commit
This commit is contained in:
63
src/errors.rs
Normal file
63
src/errors.rs
Normal file
@@ -0,0 +1,63 @@
|
||||
use std::path::PathBuf;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum SandboxError {
|
||||
HomeNotSet,
|
||||
BwrapNotFound,
|
||||
CommandNotFound(PathBuf),
|
||||
CommandNotExecutable(PathBuf),
|
||||
RwPathMissing(PathBuf),
|
||||
RoPathMissing(PathBuf),
|
||||
ChdirMissing(PathBuf),
|
||||
CurrentDirUnavailable(std::io::Error),
|
||||
GlobPattern(glob::PatternError),
|
||||
Io(std::io::Error),
|
||||
}
|
||||
|
||||
impl std::fmt::Display for SandboxError {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
Self::HomeNotSet => write!(
|
||||
f,
|
||||
"$HOME is not set; cannot determine which paths to protect"
|
||||
),
|
||||
Self::BwrapNotFound => write!(
|
||||
f,
|
||||
"bwrap not found; install bubblewrap (e.g. `apt install bubblewrap` or `pacman -S bubblewrap`)"
|
||||
),
|
||||
Self::CommandNotFound(p) => write!(f, "command not found: {}", p.display()),
|
||||
Self::CommandNotExecutable(p) => {
|
||||
write!(f, "command is not executable: {}", p.display())
|
||||
}
|
||||
Self::RwPathMissing(p) => write!(f, "--rw path does not exist: {}", p.display()),
|
||||
Self::RoPathMissing(p) => write!(f, "--ro path does not exist: {}", p.display()),
|
||||
Self::ChdirMissing(p) => write!(f, "--chdir path does not exist: {}", p.display()),
|
||||
Self::CurrentDirUnavailable(e) => write!(f, "cannot determine current directory: {e}"),
|
||||
Self::GlobPattern(e) => write!(f, "invalid glob pattern: {e}"),
|
||||
Self::Io(e) => write!(f, "I/O error: {e}"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl std::error::Error for SandboxError {
|
||||
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
|
||||
match self {
|
||||
Self::CurrentDirUnavailable(e) => Some(e),
|
||||
Self::GlobPattern(e) => Some(e),
|
||||
Self::Io(e) => Some(e),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<std::io::Error> for SandboxError {
|
||||
fn from(e: std::io::Error) -> Self {
|
||||
Self::Io(e)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<glob::PatternError> for SandboxError {
|
||||
fn from(e: glob::PatternError) -> Self {
|
||||
Self::GlobPattern(e)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user