use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PolicyParseError {
Yaml(String),
InvalidCapability {
raw: String,
reason: String,
},
InvalidSyscall {
raw: String,
reason: String,
},
}
impl fmt::Display for PolicyParseError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Yaml(msg) => write!(f, "policy YAML parse error: {msg}"),
Self::InvalidCapability { raw, reason } => {
write!(f, "invalid capability {raw:?}: {reason}")
}
Self::InvalidSyscall { raw, reason } => {
write!(f, "invalid syscall {raw:?}: {reason}")
}
}
}
}
impl std::error::Error for PolicyParseError {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn display_yaml_error() {
let err = PolicyParseError::Yaml("bad".to_string());
assert_eq!(err.to_string(), "policy YAML parse error: bad");
}
#[test]
fn display_invalid_capability() {
let err = PolicyParseError::InvalidCapability {
raw: "teleport".to_string(),
reason: "unknown capability: 'teleport'".to_string(),
};
assert!(err.to_string().contains("teleport"));
}
}