backbone_integrations/application/service/
integrations_events.rs1use serde::{Deserialize, Serialize};
10use uuid::Uuid;
11
12#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
14pub struct IntegrationEventMapped {
15 pub event_id: Uuid,
16 pub company_id: Uuid,
18 pub connector_id: Uuid,
19 pub event_type: String,
20 pub external_id: String,
21 pub internal_ref_type: String,
22 pub internal_ref_id: Uuid,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
26#[serde(tag = "type")]
27pub enum IntegrationEvent {
28 IntegrationEventMapped(IntegrationEventMapped),
29 IntegrationEventFailed { event_id: Uuid, company_id: Uuid, connector_id: Uuid, external_id: String, reason: String },
31 IntegrationEventIgnored { event_id: Uuid, company_id: Uuid, connector_id: Uuid, external_id: String, reason: String },
33}
34
35pub trait IntegrationEventSink: Send + Sync {
36 fn publish(&self, event: &IntegrationEvent);
37}
38
39#[derive(Debug, Default, Clone)]
40pub struct LoggingSink;
41
42impl IntegrationEventSink for LoggingSink {
43 fn publish(&self, event: &IntegrationEvent) {
44 tracing::info!(?event, "integration event");
45 }
46}