authz_resolver/domain/
error.rs1use authz_resolver_sdk::AuthZResolverError;
4use modkit_macros::domain_model;
5
6#[domain_model]
8#[derive(thiserror::Error, Debug)]
9pub enum DomainError {
10 #[error("types registry is not available: {0}")]
11 TypesRegistryUnavailable(String),
12
13 #[error("no plugin instances found for vendor '{vendor}'")]
14 PluginNotFound { vendor: String },
15
16 #[error("invalid plugin instance content for '{gts_id}': {reason}")]
17 InvalidPluginInstance { gts_id: String, reason: String },
18
19 #[error("plugin not available for '{gts_id}': {reason}")]
20 PluginUnavailable { gts_id: String, reason: String },
21
22 #[error("internal error: {0}")]
23 Internal(String),
24}
25
26impl From<types_registry_sdk::TypesRegistryError> for DomainError {
27 fn from(e: types_registry_sdk::TypesRegistryError) -> Self {
28 Self::Internal(e.to_string())
29 }
30}
31
32impl From<modkit::client_hub::ClientHubError> for DomainError {
33 fn from(e: modkit::client_hub::ClientHubError) -> Self {
34 Self::Internal(e.to_string())
35 }
36}
37
38impl From<serde_json::Error> for DomainError {
39 fn from(e: serde_json::Error) -> Self {
40 Self::Internal(e.to_string())
41 }
42}
43
44impl From<modkit::plugins::ChoosePluginError> for DomainError {
45 fn from(e: modkit::plugins::ChoosePluginError) -> Self {
46 match e {
47 modkit::plugins::ChoosePluginError::InvalidPluginInstance { gts_id, reason } => {
48 Self::InvalidPluginInstance { gts_id, reason }
49 }
50 modkit::plugins::ChoosePluginError::PluginNotFound { vendor, .. } => {
51 Self::PluginNotFound { vendor }
52 }
53 }
54 }
55}
56
57impl From<AuthZResolverError> for DomainError {
58 fn from(e: AuthZResolverError) -> Self {
59 match e {
60 AuthZResolverError::NoPluginAvailable => Self::PluginNotFound {
61 vendor: "unknown".to_owned(),
62 },
63 AuthZResolverError::ServiceUnavailable(msg) => Self::PluginUnavailable {
64 gts_id: "unknown".to_owned(),
65 reason: msg,
66 },
67 AuthZResolverError::Internal(msg) => Self::Internal(msg),
68 }
69 }
70}
71
72impl From<DomainError> for AuthZResolverError {
73 fn from(e: DomainError) -> Self {
74 match e {
75 DomainError::PluginNotFound { .. } => Self::NoPluginAvailable,
76 DomainError::InvalidPluginInstance { gts_id, reason } => {
77 Self::Internal(format!("invalid plugin instance '{gts_id}': {reason}"))
78 }
79 DomainError::PluginUnavailable { gts_id, reason } => {
80 Self::ServiceUnavailable(format!("plugin not available for '{gts_id}': {reason}"))
81 }
82 DomainError::TypesRegistryUnavailable(reason) | DomainError::Internal(reason) => {
83 Self::Internal(reason)
84 }
85 }
86 }
87}