Skip to main content

statsig_rust/
initialize_response.rs

1use crate::{
2    evaluation::evaluation_types::{AnyConfigEvaluation, GateEvaluation, LayerEvaluation},
3    gcir::gcir_formatter::EvaluatedKeys,
4    interned_string::InternedString,
5    specs_response::{
6        param_store_types::Parameter,
7        spec_types::{SessionReplayPrivacySetting, SessionReplayTrigger},
8    },
9    user::{StatsigUserInternal, StatsigUserLoggable},
10};
11
12use serde::{Deserialize, Serialize};
13use serde_with::skip_serializing_none;
14use std::collections::HashMap;
15
16#[skip_serializing_none]
17#[derive(Serialize, Deserialize)]
18pub struct InitializeResponse {
19    pub feature_gates: HashMap<InternedString, GateEvaluation>,
20    pub dynamic_configs: HashMap<InternedString, AnyConfigEvaluation>,
21    pub layer_configs: HashMap<InternedString, LayerEvaluation>,
22    pub time: u64,
23    pub has_updates: bool,
24    pub hash_used: String,
25    pub user: StatsigUserLoggable,
26    #[serde(rename = "sdkInfo")]
27    pub sdk_info: HashMap<String, String>,
28    #[serde(rename = "sdkParams")]
29    pub sdk_params: HashMap<String, String>,
30    pub evaluated_keys: EvaluatedKeys,
31    pub param_stores: HashMap<String, HashMap<String, Parameter>>,
32    pub can_record_session: Option<bool>,
33    pub session_recording_rate: Option<f64>,
34    pub recording_blocked: Option<bool>,
35    pub passes_session_recording_targeting: Option<bool>,
36    pub session_recording_event_triggers: Option<HashMap<String, SessionReplayTrigger>>,
37    pub session_recording_exposure_triggers: Option<HashMap<String, SessionReplayTrigger>>,
38    pub session_recording_privacy_settings: Option<SessionReplayPrivacySetting>,
39    pub pa_hash: Option<String>,
40    pub full_checksum: Option<String>,
41}
42
43impl InitializeResponse {
44    pub fn blank(user: StatsigUserInternal) -> Self {
45        Self {
46            feature_gates: Default::default(),
47            dynamic_configs: Default::default(),
48            layer_configs: Default::default(),
49            time: 0,
50            has_updates: false,
51            hash_used: Default::default(),
52            user: user.to_loggable(),
53            sdk_params: Default::default(),
54            evaluated_keys: EvaluatedKeys::default(),
55            sdk_info: Default::default(),
56            param_stores: Default::default(),
57            can_record_session: Default::default(),
58            session_recording_rate: Default::default(),
59            recording_blocked: Default::default(),
60            passes_session_recording_targeting: Default::default(),
61            session_recording_event_triggers: Default::default(),
62            session_recording_exposure_triggers: Default::default(),
63            session_recording_privacy_settings: Default::default(),
64            pa_hash: user.get_hashed_private_attributes(),
65            full_checksum: Default::default(),
66        }
67    }
68
69    pub fn blank_without_user() -> Self {
70        Self {
71            feature_gates: Default::default(),
72            dynamic_configs: Default::default(),
73            layer_configs: Default::default(),
74            time: 0,
75            has_updates: false,
76            hash_used: Default::default(),
77            user: StatsigUserLoggable::default(),
78            sdk_params: Default::default(),
79            evaluated_keys: Default::default(),
80            sdk_info: Default::default(),
81            param_stores: Default::default(),
82            can_record_session: Default::default(),
83            session_recording_rate: Default::default(),
84            recording_blocked: Default::default(),
85            passes_session_recording_targeting: Default::default(),
86            session_recording_event_triggers: Default::default(),
87            session_recording_exposure_triggers: Default::default(),
88            session_recording_privacy_settings: Default::default(),
89            pa_hash: None,
90            full_checksum: Default::default(),
91        }
92    }
93}