lab_resource_manager/application/
error.rs1use crate::domain::aggregates::identity_link::errors::IdentityLinkError;
2use crate::domain::aggregates::resource_usage::errors::ResourceUsageError;
3use crate::domain::ports::{
4 notifier::NotificationError, repositories::RepositoryError,
5 resource_collection_access::ResourceCollectionAccessError,
6};
7use std::fmt;
8
9#[derive(Debug)]
10pub enum ApplicationError {
11 Repository(RepositoryError),
13 Notification(NotificationError),
14 ResourceCollectionAccess(ResourceCollectionAccessError),
15
16 ResourceUsage(ResourceUsageError),
18 IdentityLink(IdentityLinkError),
19
20 ExternalSystemAlreadyLinked {
23 email: String,
24 external_system: String,
25 },
26}
27
28impl fmt::Display for ApplicationError {
29 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
30 match self {
31 ApplicationError::Repository(e) => write!(f, "リポジトリエラー: {}", e),
32 ApplicationError::Notification(e) => write!(f, "通知エラー: {}", e),
33 ApplicationError::ResourceCollectionAccess(e) => {
34 write!(f, "リソースコレクションアクセスエラー: {}", e)
35 }
36 ApplicationError::ResourceUsage(e) => write!(f, "リソース使用エラー: {}", e),
37 ApplicationError::IdentityLink(e) => write!(f, "ID紐付けエラー: {}", e),
38 ApplicationError::ExternalSystemAlreadyLinked {
39 email,
40 external_system,
41 } => {
42 write!(
43 f,
44 "メールアドレス {} は既に {} に紐付けられています",
45 email, external_system
46 )
47 }
48 }
49 }
50}
51
52impl std::error::Error for ApplicationError {
53 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
54 match self {
55 ApplicationError::Repository(e) => Some(e),
56 ApplicationError::Notification(e) => Some(e),
57 ApplicationError::ResourceCollectionAccess(e) => Some(e),
58 ApplicationError::ResourceUsage(e) => Some(e),
59 ApplicationError::IdentityLink(e) => Some(e),
60 ApplicationError::ExternalSystemAlreadyLinked { .. } => None,
61 }
62 }
63}
64
65impl From<RepositoryError> for ApplicationError {
66 fn from(e: RepositoryError) -> Self {
67 ApplicationError::Repository(e)
68 }
69}
70
71impl From<ResourceUsageError> for ApplicationError {
72 fn from(e: ResourceUsageError) -> Self {
73 ApplicationError::ResourceUsage(e)
74 }
75}
76
77impl From<IdentityLinkError> for ApplicationError {
78 fn from(e: IdentityLinkError) -> Self {
79 ApplicationError::IdentityLink(e)
80 }
81}
82
83impl From<NotificationError> for ApplicationError {
84 fn from(e: NotificationError) -> Self {
85 ApplicationError::Notification(e)
86 }
87}
88
89impl From<ResourceCollectionAccessError> for ApplicationError {
90 fn from(e: ResourceCollectionAccessError) -> Self {
91 ApplicationError::ResourceCollectionAccess(e)
92 }
93}