1use rhai::{EvalAltResult, ParseError};
2use thiserror::Error;
3
4use std::{error::Error as StdError, io::Error as IoError};
5
6#[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#[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#[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#[derive(Error, Debug)]
37pub enum RbacError {
38 #[error("Role `{0}` not found")]
39 NotFound(String),
40}
41#[derive(Error, Debug)]
43#[error("Adapter error: {0:?}")]
44pub struct AdapterError(pub Box<dyn StdError + Send + Sync>);
45
46#[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}