64 lines
2.1 KiB
Rust
64 lines
2.1 KiB
Rust
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)
|
|
}
|
|
}
|