lab_resource_manager/domain/ports/
notifier.rs1use crate::domain::{
3 aggregates::resource_usage::entity::ResourceUsage, errors::DomainError, ports::PortError,
4};
5use async_trait::async_trait;
6use std::fmt;
7
8#[derive(Debug, Clone)]
10pub enum NotificationEvent {
11 ResourceUsageCreated(ResourceUsage),
13 ResourceUsageUpdated(ResourceUsage),
15 ResourceUsageDeleted(ResourceUsage),
17}
18
19#[async_trait]
21pub trait Notifier: Send + Sync {
22 async fn notify(&self, event: NotificationEvent) -> Result<(), NotificationError>;
24}
25
26#[derive(Debug)]
28pub enum NotificationError {
29 SendFailure(String),
31 RepositoryError(String),
33}
34
35impl fmt::Display for NotificationError {
36 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
37 match self {
38 NotificationError::SendFailure(msg) => write!(f, "通知送信エラー: {}", msg),
39 NotificationError::RepositoryError(msg) => {
40 write!(f, "通知準備中のリポジトリエラー: {}", msg)
41 }
42 }
43 }
44}
45
46impl std::error::Error for NotificationError {}
47impl DomainError for NotificationError {}
48impl PortError for NotificationError {}