use std::time::Duration;
use solti_model::{
AdmissionPolicy as ModelAdmissionPolicy, BackoffPolicy as ModelBackoffPolicy,
JitterPolicy as ModelJitterPolicy, RestartPolicy as ModelRestartPolicy,
};
use taskvisor::{AdmissionPolicy, BackoffPolicy, JitterPolicy, RestartPolicy};
use crate::error::CoreError;
pub(crate) fn to_admission_policy(s: ModelAdmissionPolicy) -> Result<AdmissionPolicy, CoreError> {
match s {
ModelAdmissionPolicy::DropIfRunning => Ok(AdmissionPolicy::DropIfRunning),
ModelAdmissionPolicy::Replace => Ok(AdmissionPolicy::Replace),
ModelAdmissionPolicy::Queue => Ok(AdmissionPolicy::Queue),
other => Err(CoreError::Mapping(format!(
"unknown AdmissionPolicy variant: {other:?}"
))),
}
}
pub(crate) fn to_jitter_policy(s: ModelJitterPolicy) -> Result<JitterPolicy, CoreError> {
match s {
ModelJitterPolicy::Decorrelated => Ok(JitterPolicy::Decorrelated),
ModelJitterPolicy::Equal => Ok(JitterPolicy::Equal),
ModelJitterPolicy::Full => Ok(JitterPolicy::Full),
ModelJitterPolicy::None => Ok(JitterPolicy::None),
other => Err(CoreError::Mapping(format!(
"unknown JitterPolicy variant: {other:?}"
))),
}
}
pub(crate) fn to_restart_policy(s: ModelRestartPolicy) -> Result<RestartPolicy, CoreError> {
match s {
ModelRestartPolicy::Always { interval_ms } => Ok(RestartPolicy::Always {
interval: interval_ms.map(Duration::from_millis),
}),
ModelRestartPolicy::OnFailure => Ok(RestartPolicy::OnFailure),
ModelRestartPolicy::Never => Ok(RestartPolicy::Never),
other => Err(CoreError::Mapping(format!(
"unknown RestartPolicy variant: {other:?}"
))),
}
}
pub(crate) fn to_backoff_policy(s: &ModelBackoffPolicy) -> Result<BackoffPolicy, CoreError> {
Ok(BackoffPolicy {
first: Duration::from_millis(s.first_ms),
max: Duration::from_millis(s.max_ms),
jitter: to_jitter_policy(s.jitter)?,
factor: s.factor,
})
}