lab_resource_manager/domain/ports/repositories/
errors.rs1use crate::domain::aggregates::resource_usage::errors::ResourceUsageError;
2use crate::domain::common::value_objects::errors::EmailAddressError;
3use crate::domain::errors::DomainError;
4use crate::domain::ports::error::PortError;
5use std::fmt;
6
7#[derive(Debug)]
8pub enum RepositoryError {
9 NotFound,
10 ConnectionError(String),
11 InvalidEmail(EmailAddressError),
13 InvalidResourceUsage(ResourceUsageError),
15 Unknown(String),
16}
17
18impl fmt::Display for RepositoryError {
19 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
20 match self {
21 RepositoryError::NotFound => write!(f, "リソースが見つかりません"),
22 RepositoryError::ConnectionError(msg) => write!(f, "接続エラー: {}", msg),
23 RepositoryError::InvalidEmail(e) => write!(f, "無効なメールアドレス: {}", e),
24 RepositoryError::InvalidResourceUsage(e) => {
25 write!(f, "リソース使用のドメインルール違反: {}", e)
26 }
27 RepositoryError::Unknown(msg) => write!(f, "不明なエラー: {}", msg),
28 }
29 }
30}
31
32impl std::error::Error for RepositoryError {
33 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
34 match self {
35 RepositoryError::InvalidEmail(e) => Some(e),
36 RepositoryError::InvalidResourceUsage(e) => Some(e),
37 _ => None,
38 }
39 }
40}
41
42impl From<EmailAddressError> for RepositoryError {
43 fn from(e: EmailAddressError) -> Self {
44 RepositoryError::InvalidEmail(e)
45 }
46}
47
48impl From<ResourceUsageError> for RepositoryError {
49 fn from(e: ResourceUsageError) -> Self {
50 RepositoryError::InvalidResourceUsage(e)
51 }
52}
53
54impl DomainError for RepositoryError {}
55impl PortError for RepositoryError {}