backbone_support/application/service/
support_events.rs1use serde::{Deserialize, Serialize};
9use uuid::Uuid;
10
11#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
14pub struct IssueResolved {
15 pub issue_id: Uuid,
16 pub fulfilled: bool,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
21pub struct IssueEscalated {
22 pub issue_id: Uuid,
23 pub project_id: Uuid,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
28pub struct WarrantyClaimFiled {
29 pub claim_id: Uuid,
30 pub is_under_warranty: bool,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
35#[serde(tag = "type")]
36pub enum SupportEvent {
37 IssueResolved(IssueResolved),
38 IssueEscalated(IssueEscalated),
39 WarrantyClaimFiled(WarrantyClaimFiled),
40}
41
42pub trait SupportEventSink: Send + Sync {
44 fn publish(&self, event: &SupportEvent);
45}
46
47#[derive(Debug, Default, Clone)]
49pub struct LoggingSink;
50
51impl SupportEventSink for LoggingSink {
52 fn publish(&self, event: &SupportEvent) {
53 tracing::info!(?event, "support event");
54 }
55}