use std::{io, path::PathBuf};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Operation {
Open,
Metadata,
CreateDirectory,
CreateFile,
ReadDirectory,
RemoveFile,
SyncDirectory,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Refusal {
InvalidPath,
SymbolicLink,
NotDirectory,
NotRegularFile,
}
#[derive(Debug, thiserror::Error)]
pub enum CapabilityError {
#[error("{operation:?} failed at {path:?}: {source}")]
Io {
operation: Operation,
path: PathBuf,
#[source]
source: io::Error,
},
#[error("{reason:?} at {path:?}")]
Refused {
path: PathBuf,
reason: Refusal,
},
#[error("permissions {actual:o} at {path:?} include forbidden bits {forbidden:o}")]
Permissions {
path: PathBuf,
actual: u32,
forbidden: u32,
},
#[error("directory entries at {path:?} exceed {maximum}")]
EntryLimit {
path: PathBuf,
maximum: usize,
},
}
#[derive(Debug, thiserror::Error)]
#[error("file removal failed (removed={removed}): {source}")]
pub struct RemovalError {
pub removed: bool,
#[source]
pub source: CapabilityError,
}