authn_resolver/domain/
error.rs1use authn_resolver_sdk::AuthNResolverError;
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("unauthorized: {0}")]
23 Unauthorized(String),
24
25 #[error("internal error: {0}")]
26 Internal(String),
27}
28
29impl From<types_registry_sdk::TypesRegistryError> for DomainError {
30 fn from(e: types_registry_sdk::TypesRegistryError) -> Self {
31 Self::Internal(e.to_string())
32 }
33}
34
35impl From<modkit::client_hub::ClientHubError> for DomainError {
36 fn from(e: modkit::client_hub::ClientHubError) -> Self {
37 Self::Internal(e.to_string())
38 }
39}
40
41impl From<serde_json::Error> for DomainError {
42 fn from(e: serde_json::Error) -> Self {
43 Self::Internal(e.to_string())
44 }
45}
46
47impl From<modkit::plugins::ChoosePluginError> for DomainError {
48 fn from(e: modkit::plugins::ChoosePluginError) -> Self {
49 match e {
50 modkit::plugins::ChoosePluginError::InvalidPluginInstance { gts_id, reason } => {
51 Self::InvalidPluginInstance { gts_id, reason }
52 }
53 modkit::plugins::ChoosePluginError::PluginNotFound { vendor } => {
54 Self::PluginNotFound { vendor }
55 }
56 }
57 }
58}
59
60impl From<AuthNResolverError> for DomainError {
61 fn from(e: AuthNResolverError) -> Self {
62 match e {
63 AuthNResolverError::Unauthorized(msg) => Self::Unauthorized(msg),
64 AuthNResolverError::NoPluginAvailable => Self::PluginNotFound {
65 vendor: "unknown".to_owned(),
66 },
67 AuthNResolverError::ServiceUnavailable(msg) => Self::PluginUnavailable {
68 gts_id: "unknown".to_owned(),
69 reason: msg,
70 },
71 AuthNResolverError::Internal(msg) => Self::Internal(msg),
72 }
73 }
74}
75
76impl From<DomainError> for AuthNResolverError {
77 fn from(e: DomainError) -> Self {
78 match e {
79 DomainError::PluginNotFound { .. } => Self::NoPluginAvailable,
80 DomainError::InvalidPluginInstance { gts_id, reason } => {
81 Self::Internal(format!("invalid plugin instance '{gts_id}': {reason}"))
82 }
83 DomainError::PluginUnavailable { gts_id, reason } => {
84 Self::ServiceUnavailable(format!("plugin not available for '{gts_id}': {reason}"))
85 }
86 DomainError::Unauthorized(msg) => Self::Unauthorized(msg),
87 DomainError::TypesRegistryUnavailable(reason) | DomainError::Internal(reason) => {
88 Self::Internal(reason)
89 }
90 }
91 }
92}