casbin/
error.rs

1use rhai::{EvalAltResult, ParseError};
2use thiserror::Error;
3
4use std::{error::Error as StdError, io::Error as IoError};
5
6/// ModelError represents any type of errors in model configuration
7#[derive(Error, Debug)]
8pub enum ModelError {
9    #[error("Invalid request definition: `{0}`")]
10    R(String),
11    #[error("Invalid policy definition: `{0}`")]
12    P(String),
13    #[error("Unsupported effect: `{0}`")]
14    E(String),
15    #[error("Invalid matcher: `{0}`")]
16    M(String),
17    #[error("Other: `{0}`")]
18    Other(String),
19}
20
21/// RequestError represents any type of errors in coming request
22#[derive(Error, Debug)]
23pub enum RequestError {
24    #[error("Request doesn't match request definition. expected length: {0}, found length {1}")]
25    UnmatchRequestDefinition(usize, usize),
26}
27
28/// PolicyError represents any type of errors in policy
29#[derive(Error, Debug)]
30pub enum PolicyError {
31    #[error("Policy doesn't match policy definition. expected length: {0}, found length {1}")]
32    UnmatchPolicyDefinition(usize, usize),
33}
34
35/// RBAC error represents any type of errors in RBAC role manager
36#[derive(Error, Debug)]
37pub enum RbacError {
38    #[error("Role `{0}` not found")]
39    NotFound(String),
40}
41/// AdapterError error represents any type of errors in adapter's execution
42#[derive(Error, Debug)]
43#[error("Adapter error: {0:?}")]
44pub struct AdapterError(pub Box<dyn StdError + Send + Sync>);
45
46/// General casbin error
47#[derive(Error, Debug)]
48pub enum Error {
49    #[error("Casbin Io Error: `{0:?}`")]
50    IoError(#[from] IoError),
51
52    #[error("Casbin Model Error: `{0:?}`")]
53    ModelError(#[from] ModelError),
54
55    #[error("Casbin Policy Error: `{0:?}`")]
56    PolicyError(#[from] PolicyError),
57
58    #[error("Casbin Role Manager Error: `{0:?}`")]
59    RbacError(#[from] RbacError),
60
61    #[error("Casbin Evaluation Error: `{0:?}`")]
62    RhaiError(#[from] Box<EvalAltResult>),
63    #[error("Casbin Parse Error: `{0:?}`")]
64    RhaiParseError(#[from] ParseError),
65
66    #[error("Casbin Request Error: `{0:?}`")]
67    RequestError(#[from] RequestError),
68
69    #[error("Casbin Adapter Error: `{0:?}`")]
70    AdapterError(#[from] AdapterError),
71}
72
73#[cfg(test)]
74mod tests {
75    use super::*;
76
77    fn is_send<T: Send>() -> bool {
78        true
79    }
80
81    fn is_sync<T: Sync>() -> bool {
82        true
83    }
84
85    #[test]
86    fn test_send_sync() {
87        assert!(is_send::<Error>());
88        assert!(is_sync::<Error>());
89    }
90}