use super::{CasObservabilityMode, ContentionThresholds, ListenerPanicPolicy};
#[derive(Debug, Clone, PartialEq)]
pub struct CasObservabilityConfig {
mode: CasObservabilityMode,
listener_panic_policy: ListenerPanicPolicy,
contention_thresholds: Option<ContentionThresholds>,
}
impl CasObservabilityConfig {
#[inline]
pub fn report_only() -> Self {
Self::default()
}
#[inline]
pub fn event_stream() -> Self {
Self {
mode: CasObservabilityMode::EventStream,
..Self::default()
}
}
#[inline]
pub fn event_stream_with_alert(thresholds: ContentionThresholds) -> Self {
Self {
mode: CasObservabilityMode::EventStreamWithAlert,
contention_thresholds: Some(thresholds),
..Self::default()
}
}
#[inline]
pub fn mode(&self) -> CasObservabilityMode {
self.mode
}
#[inline]
pub fn with_report_only(mut self) -> Self {
self.mode = CasObservabilityMode::ReportOnly;
self.contention_thresholds = None;
self
}
#[inline]
pub fn with_event_stream(mut self) -> Self {
self.mode = CasObservabilityMode::EventStream;
self.contention_thresholds = None;
self
}
#[inline]
pub fn with_event_stream_with_alert(mut self, thresholds: ContentionThresholds) -> Self {
self.mode = CasObservabilityMode::EventStreamWithAlert;
self.contention_thresholds = Some(thresholds);
self
}
#[inline]
pub fn without_contention_alerts(self) -> Self {
self.with_event_stream()
}
#[inline]
pub fn listener_panic_policy(&self) -> ListenerPanicPolicy {
self.listener_panic_policy
}
#[inline]
pub fn with_listener_panic_policy(mut self, policy: ListenerPanicPolicy) -> Self {
self.listener_panic_policy = policy;
self
}
#[inline]
pub fn contention_thresholds(&self) -> Option<ContentionThresholds> {
self.contention_thresholds
}
#[inline]
pub fn with_contention_thresholds(self, thresholds: ContentionThresholds) -> Self {
self.with_event_stream_with_alert(thresholds)
}
}
impl Default for CasObservabilityConfig {
#[inline]
fn default() -> Self {
Self {
mode: CasObservabilityMode::ReportOnly,
listener_panic_policy: ListenerPanicPolicy::Propagate,
contention_thresholds: None,
}
}
}