use serde::{Deserialize, Serialize};
use std::collections::HashMap;
pub mod webhook_event_type {
pub const INVITATION_CREATED: &str = "invitation.created";
pub const INVITATION_ACCEPTED: &str = "invitation.accepted";
pub const INVITATION_DEACTIVATED: &str = "invitation.deactivated";
pub const INVITATION_EMAIL_DELIVERED: &str = "invitation.email.delivered";
pub const INVITATION_EMAIL_BOUNCED: &str = "invitation.email.bounced";
pub const INVITATION_EMAIL_OPENED: &str = "invitation.email.opened";
pub const INVITATION_LINK_CLICKED: &str = "invitation.link.clicked";
pub const INVITATION_REMINDER_SENT: &str = "invitation.reminder.sent";
pub const DEPLOYMENT_CREATED: &str = "deployment.created";
pub const DEPLOYMENT_DEACTIVATED: &str = "deployment.deactivated";
pub const ABTEST_STARTED: &str = "abtest.started";
pub const ABTEST_WINNER_DECLARED: &str = "abtest.winner_declared";
pub const MEMBER_CREATED: &str = "member.created";
pub const GROUP_MEMBER_ADDED: &str = "group.member.added";
pub const EMAIL_COMPLAINED: &str = "email.complained";
}
pub mod analytics_event_type {
pub const WIDGET_LOADED: &str = "widget_loaded";
pub const INVITATION_SENT: &str = "invitation_sent";
pub const INVITATION_CLICKED: &str = "invitation_clicked";
pub const INVITATION_ACCEPTED: &str = "invitation_accepted";
pub const SHARE_TRIGGERED: &str = "share_triggered";
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VortexWebhookEvent {
pub id: String,
#[serde(rename = "type")]
pub event_type: String,
pub timestamp: String,
pub account_id: String,
pub environment_id: Option<String>,
pub source_table: String,
pub operation: String,
pub data: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VortexAnalyticsEvent {
pub id: String,
pub name: String,
pub account_id: String,
pub organization_id: String,
pub project_id: String,
pub environment_id: String,
pub deployment_id: Option<String>,
pub widget_configuration_id: Option<String>,
pub foreign_user_id: Option<String>,
pub session_id: Option<String>,
pub payload: Option<HashMap<String, serde_json::Value>>,
pub platform: Option<String>,
pub segmentation: Option<String>,
pub timestamp: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum VortexEvent {
Webhook(VortexWebhookEvent),
Analytics(VortexAnalyticsEvent),
}
impl VortexEvent {
pub fn is_webhook_event(&self) -> bool {
matches!(self, VortexEvent::Webhook(_))
}
pub fn is_analytics_event(&self) -> bool {
matches!(self, VortexEvent::Analytics(_))
}
pub fn as_webhook_event(&self) -> Option<&VortexWebhookEvent> {
match self {
VortexEvent::Webhook(e) => Some(e),
_ => None,
}
}
pub fn as_analytics_event(&self) -> Option<&VortexAnalyticsEvent> {
match self {
VortexEvent::Analytics(e) => Some(e),
_ => None,
}
}
}