statsig_rust/
initialize_response.rs1use 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}