permeable/
perm_err.rs

1use self::PermissionError::{PermissionDenied, UnknownPermission};
2use std::fmt::{Display, Formatter};
3
4#[derive(Debug, Eq, PartialEq)]
5pub enum PermissionError {
6    /// Can be used to inform which `permission` is denied for `user`.
7    PermissionDenied { permission: String, user: String },
8
9    /// Can be used to inform about a not-known Permission (e.g. typos).
10    UnknownPermission { permission: String, user: String },
11}
12
13impl Display for PermissionError {
14    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
15        match self {
16            PermissionDenied { permission, user } => {
17                write!(f, "Permission: '{permission}' not set for {user}.")
18            }
19            UnknownPermission { permission, user } => {
20                write!(f, "Unknown Permission: '{permission}' asked for {user}.")
21            }
22        }
23    }
24}
25
26impl PermissionError {
27    /// Helper to create a `PermissionDenied`-Error.
28    pub fn denied(permission: impl Display, user: impl Display) -> Self {
29        PermissionDenied {
30            permission: permission.to_string(),
31            user: user.to_string(),
32        }
33    }
34
35    /// Helper to create a `UnknownPermission`-Error.
36    pub fn unknown(permission: impl Display, user: impl Display) -> Self {
37        UnknownPermission {
38            permission: permission.to_string(),
39            user: user.to_string(),
40        }
41    }
42}