statsig_rust/event_logging/event_queue/
queued_event.rs1use 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 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}