use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum SafetyIntegrityLevel {
QM,
SIL1,
SIL2,
SIL3,
SIL4,
}
impl SafetyIntegrityLevel {
pub fn as_str(&self) -> &'static str {
match self {
SafetyIntegrityLevel::QM => "QM",
SafetyIntegrityLevel::SIL1 => "SIL1",
SafetyIntegrityLevel::SIL2 => "SIL2",
SafetyIntegrityLevel::SIL3 => "SIL3",
SafetyIntegrityLevel::SIL4 => "SIL4",
}
}
pub fn min_confidence(&self) -> f32 {
match self {
SafetyIntegrityLevel::QM => 0.0, SafetyIntegrityLevel::SIL1 => 0.5,
SafetyIntegrityLevel::SIL2 => 0.7,
SafetyIntegrityLevel::SIL3 => 0.8,
SafetyIntegrityLevel::SIL4 => 0.9,
}
}
pub fn max_latency_ns(&self) -> u64 {
match self {
SafetyIntegrityLevel::QM => u64::MAX, SafetyIntegrityLevel::SIL1 => 100_000_000, SafetyIntegrityLevel::SIL2 => 50_000_000, SafetyIntegrityLevel::SIL3 => 10_000_000, SafetyIntegrityLevel::SIL4 => 1_000_000, }
}
}