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)]
9pub enum RepositoryError {
10 NotFound,
12 ConnectionError(String),
14 InvalidEmail(EmailAddressError),
16 InvalidResourceUsage(ResourceUsageError),
18 Unknown(String),
20}
21
22impl fmt::Display for RepositoryError {
23 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24 match self {
25 RepositoryError::NotFound => write!(f, "リソースが見つかりません"),
26 RepositoryError::ConnectionError(msg) => write!(f, "接続エラー: {}", msg),
27 RepositoryError::InvalidEmail(e) => write!(f, "無効なメールアドレス: {}", e),
28 RepositoryError::InvalidResourceUsage(e) => {
29 write!(f, "リソース使用のドメインルール違反: {}", e)
30 }
31 RepositoryError::Unknown(msg) => write!(f, "不明なエラー: {}", msg),
32 }
33 }
34}
35
36impl std::error::Error for RepositoryError {
37 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
38 match self {
39 RepositoryError::InvalidEmail(e) => Some(e),
40 RepositoryError::InvalidResourceUsage(e) => Some(e),
41 _ => None,
42 }
43 }
44}
45
46impl From<EmailAddressError> for RepositoryError {
47 fn from(e: EmailAddressError) -> Self {
48 RepositoryError::InvalidEmail(e)
49 }
50}
51
52impl From<ResourceUsageError> for RepositoryError {
53 fn from(e: ResourceUsageError) -> Self {
54 RepositoryError::InvalidResourceUsage(e)
55 }
56}
57
58impl DomainError for RepositoryError {}
59impl PortError for RepositoryError {}