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