1#[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}