use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
use super::config::TelemetryConfig;
use super::scrubber::Scrubber;
use super::sink::TelemetrySink;
pub(crate) struct TelemetryContext {
pub(crate) sink: Arc<dyn TelemetrySink>,
pub(crate) config: TelemetryConfig,
pub(crate) scrubber: Scrubber,
enabled: Arc<AtomicBool>,
}
impl TelemetryContext {
pub(crate) fn with_gate(
sink: Arc<dyn TelemetrySink>,
config: TelemetryConfig,
fallback_secret: [u8; 16],
enabled: Arc<AtomicBool>,
) -> Arc<Self> {
let scrubber = Scrubber::from_config(&config, fallback_secret);
Arc::new(Self {
sink,
config,
scrubber,
enabled,
})
}
#[inline]
pub(crate) fn enabled(&self) -> bool {
self.enabled.load(Ordering::Relaxed)
}
}