use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct IssueResolved {
pub issue_id: Uuid,
pub fulfilled: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct IssueEscalated {
pub issue_id: Uuid,
pub project_id: Uuid,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct WarrantyClaimFiled {
pub claim_id: Uuid,
pub is_under_warranty: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(tag = "type")]
pub enum SupportEvent {
IssueResolved(IssueResolved),
IssueEscalated(IssueEscalated),
WarrantyClaimFiled(WarrantyClaimFiled),
}
pub trait SupportEventSink: Send + Sync {
fn publish(&self, event: &SupportEvent);
}
#[derive(Debug, Default, Clone)]
pub struct LoggingSink;
impl SupportEventSink for LoggingSink {
fn publish(&self, event: &SupportEvent) {
tracing::info!(?event, "support event");
}
}