statsig-rust 0.19.2

Statsig Rust SDK for usage in multi-user server environments.
Documentation
use crate::{
    evaluation::evaluation_types::{AnyConfigEvaluation, GateEvaluation, LayerEvaluation},
    gcir::gcir_formatter::EvaluatedKeys,
    specs_response::{
        param_store_types::Parameter,
        spec_types::{SessionReplayPrivacySetting, SessionReplayTrigger},
    },
    user::{StatsigUserInternal, StatsigUserLoggable},
};

use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use std::collections::HashMap;

#[skip_serializing_none]
#[derive(Serialize, Deserialize)]
pub struct InitializeResponse {
    pub feature_gates: HashMap<String, GateEvaluation>,
    pub dynamic_configs: HashMap<String, AnyConfigEvaluation>,
    pub layer_configs: HashMap<String, LayerEvaluation>,
    pub time: u64,
    pub has_updates: bool,
    pub hash_used: String,
    pub user: StatsigUserLoggable,
    #[serde(rename = "sdkInfo")]
    pub sdk_info: HashMap<String, String>,
    #[serde(rename = "sdkParams")]
    pub sdk_params: HashMap<String, String>,
    pub evaluated_keys: EvaluatedKeys,
    pub param_stores: HashMap<String, HashMap<String, Parameter>>,
    pub can_record_session: Option<bool>,
    pub session_recording_rate: Option<f64>,
    pub recording_blocked: Option<bool>,
    pub passes_session_recording_targeting: Option<bool>,
    pub session_recording_event_triggers: Option<HashMap<String, SessionReplayTrigger>>,
    pub session_recording_exposure_triggers: Option<HashMap<String, SessionReplayTrigger>>,
    pub session_recording_privacy_settings: Option<SessionReplayPrivacySetting>,
    pub pa_hash: Option<String>,
    pub full_checksum: Option<String>,
}

impl InitializeResponse {
    pub fn blank(user: StatsigUserInternal) -> Self {
        Self {
            feature_gates: Default::default(),
            dynamic_configs: Default::default(),
            layer_configs: Default::default(),
            time: 0,
            has_updates: false,
            hash_used: Default::default(),
            user: user.to_loggable(),
            sdk_params: Default::default(),
            evaluated_keys: EvaluatedKeys::default(),
            sdk_info: Default::default(),
            param_stores: Default::default(),
            can_record_session: Default::default(),
            session_recording_rate: Default::default(),
            recording_blocked: Default::default(),
            passes_session_recording_targeting: Default::default(),
            session_recording_event_triggers: Default::default(),
            session_recording_exposure_triggers: Default::default(),
            session_recording_privacy_settings: Default::default(),
            pa_hash: user.get_hashed_private_attributes(),
            full_checksum: Default::default(),
        }
    }

    pub fn blank_without_user() -> Self {
        Self {
            feature_gates: Default::default(),
            dynamic_configs: Default::default(),
            layer_configs: Default::default(),
            time: 0,
            has_updates: false,
            hash_used: Default::default(),
            user: StatsigUserLoggable::default(),
            sdk_params: Default::default(),
            evaluated_keys: Default::default(),
            sdk_info: Default::default(),
            param_stores: Default::default(),
            can_record_session: Default::default(),
            session_recording_rate: Default::default(),
            recording_blocked: Default::default(),
            passes_session_recording_targeting: Default::default(),
            session_recording_event_triggers: Default::default(),
            session_recording_exposure_triggers: Default::default(),
            session_recording_privacy_settings: Default::default(),
            pa_hash: None,
            full_checksum: Default::default(),
        }
    }
}