Skip to main content

statsig_rust/
initialize_response.rs

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