use async_trait::async_trait;
use uuid::Uuid;
#[derive(Debug, Clone, serde::Serialize)]
pub struct LeadRegistrationView {
pub id: Uuid,
pub name: Option<String>,
pub email: Option<String>,
pub phone: Option<String>,
pub company_name: Option<String>,
pub partner_id: Option<Uuid>,
pub sale_order_id: Option<Uuid>,
}
#[derive(Debug, Clone, serde::Serialize)]
pub struct LeadGroup {
pub rule_id: Uuid,
pub event_id: Uuid,
pub group_key: String,
pub grouping: String,
pub registrations: Vec<LeadRegistrationView>,
}
#[async_trait]
pub trait EventLeadSink: Send + Sync {
async fn create_lead(&self, group: &LeadGroup) -> Result<Uuid, String>;
async fn update_lead(&self, lead_id: Uuid, group: &LeadGroup) -> Result<(), String>;
}
pub struct RefusingLeadSink;
#[async_trait]
impl EventLeadSink for RefusingLeadSink {
async fn create_lead(&self, _group: &LeadGroup) -> Result<Uuid, String> {
Err("host installed no EventLeadSink adapter — lead generation parks".to_string())
}
async fn update_lead(&self, _lead_id: Uuid, _group: &LeadGroup) -> Result<(), String> {
Err("host installed no EventLeadSink adapter — lead generation parks".to_string())
}
}