#[cfg(doc)]
use sentry_types::protocol::v7::client_report;
#[derive(Debug, Clone, Copy)]
pub(super) enum TracingState {
#[cfg(feature = "client")]
Enabled(SamplingDecision),
Disabled(Option<SamplingDecision>),
}
impl TracingState {
#[cfg(feature = "client")]
pub(super) fn new_enabled(sampled: bool, sample_rate: f32) -> Self {
Self::Enabled(SamplingDecision {
sampled,
sample_rate,
})
}
pub(super) fn new_disabled(sampled: Option<bool>) -> Self {
let decision = sampled.map(|sampled| SamplingDecision {
sampled,
#[cfg(feature = "client")]
sample_rate: sampled.into(),
});
Self::Disabled(decision)
}
pub(super) fn trace_sampled(&self) -> Option<bool> {
match *self {
#[cfg(feature = "client")]
Self::Enabled(SamplingDecision { sampled, .. }) => Some(sampled),
Self::Disabled(decision) => decision.map(|SamplingDecision { sampled, .. }| sampled),
}
}
#[cfg(feature = "client")]
pub(super) fn finish_action(&self) -> FinishAction {
match *self {
Self::Enabled(SamplingDecision {
sampled: true,
sample_rate,
}) => FinishAction::Send { sample_rate },
Self::Enabled(SamplingDecision {
sampled: false,
sample_rate: _,
}) => FinishAction::Discard,
Self::Disabled(_) => FinishAction::Ignore,
}
}
}
#[derive(Debug, Clone, Copy)]
pub(super) struct SamplingDecision {
pub(super) sampled: bool,
#[cfg(feature = "client")]
pub(super) sample_rate: f32,
}
#[cfg(feature = "client")]
#[derive(Debug, Clone, Copy)]
pub(super) enum FinishAction {
Send { sample_rate: f32 },
Discard,
Ignore,
}