1use bon::Builder;
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct LogEventResponse {
7 pub success: bool,
8}
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct ExposureEventMetadata {
12 pub gate: String,
13 #[serde(rename = "gateValue")]
14 pub gate_value: String,
15 #[serde(rename = "ruleID")]
16 pub rule_id: String,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum StatsigEventValue {
22 String(String),
23 Number(f64),
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27#[serde(untagged)]
28pub enum StatsigEventTime {
29 UnixMillis(i64),
30 IsoDateTime(String),
31}
32
33#[derive(Debug, Clone, Builder, Serialize, Deserialize)]
34pub struct StatsigEvent {
35 #[serde(rename = "eventName")]
36 #[builder(into)]
37 pub event_name: String,
38
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub value: Option<StatsigEventValue>,
41
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub time: Option<StatsigEventTime>,
44
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub user: Option<crate::user::User>,
47
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub metadata: Option<HashMap<String, String>>,
50
51 #[serde(rename = "secondaryExposures", skip_serializing_if = "Option::is_none")]
52 pub secondary_exposures: Option<Vec<ExposureEventMetadata>>,
53
54 #[serde(rename = "statsigMetadata", skip_serializing_if = "Option::is_none")]
55 pub statsig_metadata: Option<crate::api::StatsigMetadata>,
56}