use crate::models::{License, ValidationResult};
#[derive(Debug, Clone)]
pub struct Event {
pub kind: EventKind,
pub data: Option<EventData>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum EventKind {
ActivationStart,
ActivationSuccess,
ActivationError,
ValidationStart,
ValidationSuccess,
ValidationFailed,
ValidationError,
ValidationOfflineSuccess,
ValidationOfflineFailed,
DeactivationStart,
DeactivationSuccess,
DeactivationError,
HeartbeatSuccess,
HeartbeatError,
LicenseLoaded,
LicenseRevoked,
OfflineTokenVerified,
OfflineTokenVerificationFailed,
AutoValidationCycle,
AutoValidationStopped,
NetworkOnline,
NetworkOffline,
SdkReset,
}
#[derive(Debug, Clone)]
pub enum EventData {
License(Box<License>),
Validation(Box<ValidationResult>),
Error(String),
Message(String),
NextRunAt(chrono::DateTime<chrono::Utc>),
}
impl Event {
pub fn new(kind: EventKind) -> Self {
Self { kind, data: None }
}
pub fn with_license(kind: EventKind, license: License) -> Self {
Self {
kind,
data: Some(EventData::License(Box::new(license))),
}
}
pub fn with_validation(kind: EventKind, result: ValidationResult) -> Self {
Self {
kind,
data: Some(EventData::Validation(Box::new(result))),
}
}
pub fn with_error(kind: EventKind, error: impl Into<String>) -> Self {
Self {
kind,
data: Some(EventData::Error(error.into())),
}
}
}
impl std::fmt::Display for EventKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let s = match self {
Self::ActivationStart => "activation:start",
Self::ActivationSuccess => "activation:success",
Self::ActivationError => "activation:error",
Self::ValidationStart => "validation:start",
Self::ValidationSuccess => "validation:success",
Self::ValidationFailed => "validation:failed",
Self::ValidationError => "validation:error",
Self::ValidationOfflineSuccess => "validation:offline-success",
Self::ValidationOfflineFailed => "validation:offline-failed",
Self::DeactivationStart => "deactivation:start",
Self::DeactivationSuccess => "deactivation:success",
Self::DeactivationError => "deactivation:error",
Self::HeartbeatSuccess => "heartbeat:success",
Self::HeartbeatError => "heartbeat:error",
Self::LicenseLoaded => "license:loaded",
Self::LicenseRevoked => "license:revoked",
Self::OfflineTokenVerified => "offlineToken:verified",
Self::OfflineTokenVerificationFailed => "offlineToken:verificationFailed",
Self::AutoValidationCycle => "autovalidation:cycle",
Self::AutoValidationStopped => "autovalidation:stopped",
Self::NetworkOnline => "network:online",
Self::NetworkOffline => "network:offline",
Self::SdkReset => "sdk:reset",
};
write!(f, "{}", s)
}
}