1use thiserror::Error;
2
3use crate::types::{Action, Principal};
4
5#[derive(Debug, Clone, PartialEq, Eq, Error)]
6pub enum AuthzError {
7 #[error("unauthorized principal for action")]
8 Unauthorized {
9 principal: Principal,
10 action: Action,
11 reason: String,
12 },
13 #[error("unknown principal")]
14 UnknownPrincipal,
15 #[error("audit sink failed: {message}")]
16 Audit { message: String },
17 #[error("internal authorization error: {message}")]
18 Internal { message: String },
19}
20
21impl AuthzError {
22 #[must_use]
23 pub fn audit(error: AuditError) -> Self {
24 Self::Audit {
25 message: error.to_string(),
26 }
27 }
28}
29
30#[derive(Debug, Clone, PartialEq, Eq, Error)]
31pub enum AuditError {
32 #[error("{message}")]
33 Sink { message: String },
34}
35
36impl AuditError {
37 #[must_use]
38 pub fn sink(message: impl Into<String>) -> Self {
39 Self::Sink {
40 message: message.into(),
41 }
42 }
43}