Skip to main content

hirn_policy/
error.rs

1//! Policy error types.
2
3/// Errors from the policy engine.
4#[derive(Debug, thiserror::Error)]
5#[non_exhaustive]
6pub enum PolicyError {
7    #[error("schema invalid: {0}")]
8    SchemaInvalid(String),
9
10    #[error("policy invalid in '{name}': {detail}")]
11    PolicyInvalid { name: String, detail: String },
12
13    #[error("entity invalid: {0}")]
14    EntityInvalid(String),
15
16    #[error("invalid action: '{0}'")]
17    InvalidAction(String),
18
19    #[error("I/O error at '{path}': {reason}")]
20    Io { path: String, reason: String },
21
22    #[error(
23        "no Cedar policy files found under '{path}'; configure policies or opt into explicit insecure open mode"
24    )]
25    MissingPolicies { path: String },
26}
27
28impl From<PolicyError> for hirn_core::HirnError {
29    fn from(err: PolicyError) -> Self {
30        match &err {
31            PolicyError::SchemaInvalid(_)
32            | PolicyError::PolicyInvalid { .. }
33            | PolicyError::EntityInvalid(_)
34            | PolicyError::InvalidAction(_)
35            | PolicyError::MissingPolicies { .. } => Self::InvalidInput(err.to_string()),
36            PolicyError::Io { .. } => Self::storage(err),
37        }
38    }
39}