pub use epics_base_rs::runtime::supervise::{RestartPolicy, RestartTracker};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum RestartMode {
#[default]
OnExit,
Disabled,
OneShot,
}
impl RestartMode {
pub fn next(self) -> Self {
match self {
Self::OnExit => Self::Disabled,
Self::Disabled => Self::OneShot,
Self::OneShot => Self::OnExit,
}
}
pub fn label(self) -> &'static str {
match self {
Self::OnExit => "ON",
Self::Disabled => "OFF",
Self::OneShot => "ONESHOT",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn mode_cycles() {
assert_eq!(RestartMode::OnExit.next(), RestartMode::Disabled);
assert_eq!(RestartMode::Disabled.next(), RestartMode::OneShot);
assert_eq!(RestartMode::OneShot.next(), RestartMode::OnExit);
}
#[test]
fn mode_labels_match_c_procserv() {
assert_eq!(RestartMode::OnExit.label(), "ON");
assert_eq!(RestartMode::Disabled.label(), "OFF");
assert_eq!(RestartMode::OneShot.label(), "ONESHOT");
}
}