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