statsig_client/
events.rs

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}