use crate::AccessMode;
use std::net::SocketAddr;
use std::path::PathBuf;
use thiserror::Error;
#[derive(Debug, Error, Clone, PartialEq, Eq)]
pub enum PolicyError {
#[error("path cannot be empty")]
EmptyPath,
#[error("path must be absolute: {}", path.display())]
ExpectedAbsolute {
path: PathBuf,
},
#[error("path must be workspace-relative: {}", path.display())]
ExpectedRelative {
path: PathBuf,
},
#[error("path must not contain a NUL character: {}", path.display())]
PathContainsNul {
path: PathBuf,
},
#[error(
"workspace-relative path cannot contain parent traversal: {}",
path.display()
)]
ParentTraversal {
path: PathBuf,
},
#[error("invalid domain pattern: {pattern}")]
InvalidDomainPattern {
pattern: String,
},
#[error("resolved address {address} does not match IP literal {literal}")]
ResolvedAddressMismatch {
literal: String,
address: SocketAddr,
},
#[error("invalid glob pattern {pattern:?}: {reason}")]
InvalidGlobPattern {
pattern: String,
reason: String,
},
#[error("filesystem glob rules support only deny access; requested {access:?}")]
UnsupportedGlobAccess {
access: AccessMode,
},
#[error("invalid protected relative path {path:?}: {reason}")]
InvalidProtectedPath {
path: PathBuf,
reason: String,
},
#[error("{message}")]
InvalidContext {
message: String,
},
#[error("{message}")]
InvalidRule {
message: String,
},
}