use std::time::Instant;
use tower_resilience_core::ResilienceEvent;
#[derive(Debug, Clone)]
pub enum FallbackEvent {
Success {
pattern_name: String,
timestamp: Instant,
},
FailedAttempt {
pattern_name: String,
timestamp: Instant,
},
Applied {
pattern_name: String,
timestamp: Instant,
strategy: &'static str,
},
Failed {
pattern_name: String,
timestamp: Instant,
},
Skipped {
pattern_name: String,
timestamp: Instant,
},
}
impl ResilienceEvent for FallbackEvent {
fn event_type(&self) -> &'static str {
match self {
Self::Success { .. } => "success",
Self::FailedAttempt { .. } => "failed_attempt",
Self::Applied { .. } => "applied",
Self::Failed { .. } => "failed",
Self::Skipped { .. } => "skipped",
}
}
fn timestamp(&self) -> Instant {
match self {
Self::Success { timestamp, .. }
| Self::FailedAttempt { timestamp, .. }
| Self::Applied { timestamp, .. }
| Self::Failed { timestamp, .. }
| Self::Skipped { timestamp, .. } => *timestamp,
}
}
fn pattern_name(&self) -> &str {
match self {
Self::Success { pattern_name, .. }
| Self::FailedAttempt { pattern_name, .. }
| Self::Applied { pattern_name, .. }
| Self::Failed { pattern_name, .. }
| Self::Skipped { pattern_name, .. } => pattern_name,
}
}
}