Skip to main content

statsig_rust/event_logging/event_queue/
queued_event.rs

1use super::{
2    queued_config_expo::QueuedConfigExposureEvent,
3    queued_experiment_expo::QueuedExperimentExposureEvent, queued_expo::QueuedExposureEvent,
4    queued_gate_expo::QueuedGateExposureEvent,
5    queued_layer_param_expo::QueuedLayerParamExposureEvent,
6};
7use crate::{
8    evaluation::evaluation_types::ExtraExposureInfo,
9    event_logging::{
10        exposure_sampling::{EvtSamplingDecision, ExposureSamplingKey},
11        statsig_event_internal::StatsigEventInternal,
12    },
13};
14
15pub trait EnqueueOperation {
16    fn as_exposure(&self) -> Option<&impl QueuedExposure<'_>>;
17    fn into_queued_event(self, sampling_decision: EvtSamplingDecision) -> QueuedEvent;
18}
19
20pub trait QueuedExposure<'a> {
21    fn create_exposure_sampling_key(&self) -> ExposureSamplingKey;
22    fn get_rule_id_ref(&'a self) -> &'a str;
23    fn get_extra_exposure_info_ref(&'a self) -> Option<&'a ExtraExposureInfo>;
24}
25
26pub enum QueuedEvent {
27    Exposure(QueuedExposureEvent),
28    Passthrough(StatsigEventInternal),
29
30    // Deprecated - Remove when rolled into QueuedExposureEvent
31    GateExposure(QueuedGateExposureEvent),
32    ConfigExposure(QueuedConfigExposureEvent),
33    ExperimentExposure(QueuedExperimentExposureEvent),
34    LayerParamExposure(QueuedLayerParamExposureEvent),
35}
36
37impl QueuedEvent {
38    pub fn into_statsig_event_internal(self) -> StatsigEventInternal {
39        match self {
40            QueuedEvent::Exposure(event) => event.into_statsig_event_internal(),
41            QueuedEvent::Passthrough(event) => event,
42
43            QueuedEvent::GateExposure(event) => event.into_statsig_event_internal(),
44            QueuedEvent::ConfigExposure(event) => event.into_statsig_event_internal(),
45            QueuedEvent::ExperimentExposure(event) => event.into_statsig_event_internal(),
46            QueuedEvent::LayerParamExposure(event) => event.into_statsig_event_internal(),
47        }
48    }
49}