use cedar_policy::{
ContextCreationError, EntityAttrEvaluationError, ParseErrors, RequestValidationError,
entities_errors::EntitiesError,
};
use serde::{Deserialize, Serialize};
use thiserror::Error;
#[derive(Debug, Error, Serialize, Deserialize)]
#[non_exhaustive]
pub enum PolicyError {
#[error("failed to parse policy: {0}")]
ParseError(String),
#[error("evaluation error: {0}")]
EvalError(String),
#[error("request validation error: {0}")]
RequestValidationError(String),
#[error("context creation error: {0}")]
ContextError(String),
#[error("entity error: {0}")]
EntityError(String),
#[error("invalid format: {0}")]
InvalidFormat(String),
#[error("entity attribute error: {0}")]
EntityAttrError(String),
#[error("policy-store configuration error: {0}")]
PolicyStoreConfigError(String),
#[error("policy-store routing error: {0}")]
PolicyStoreRoutingError(String),
}
impl From<RequestValidationError> for PolicyError {
fn from(err: cedar_policy::RequestValidationError) -> Self {
PolicyError::RequestValidationError(err.to_string())
}
}
impl From<ParseErrors> for PolicyError {
fn from(err: ParseErrors) -> Self {
PolicyError::ParseError(err.to_string())
}
}
impl From<ContextCreationError> for PolicyError {
fn from(err: ContextCreationError) -> Self {
PolicyError::ContextError(err.to_string())
}
}
impl From<EntityAttrEvaluationError> for PolicyError {
fn from(err: EntityAttrEvaluationError) -> Self {
PolicyError::EntityAttrError(err.to_string())
}
}
impl From<EntitiesError> for PolicyError {
fn from(err: EntitiesError) -> Self {
PolicyError::EntityError(err.to_string())
}
}