use std::time::Duration;
use schemars::JsonSchema;
use serde::Deserialize;
use serde::Serialize;
use crate::configuration::mode::Mode;
#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema)]
#[serde(deny_unknown_fields, default)]
pub(crate) struct CooperativeCancellation {
enabled: bool,
mode: Mode,
#[serde(deserialize_with = "humantime_serde::deserialize")]
#[serde(serialize_with = "humantime_serde::serialize")]
#[schemars(with = "Option<String>")]
timeout: Option<Duration>,
}
impl Default for CooperativeCancellation {
fn default() -> Self {
Self {
enabled: true,
mode: Mode::Measure,
timeout: None,
}
}
}
impl CooperativeCancellation {
pub(crate) fn timeout(&self) -> Option<Duration> {
self.timeout
}
#[cfg(test)]
pub(crate) fn enabled() -> Self {
Self {
enabled: true,
mode: Mode::Enforce,
timeout: None,
}
}
pub(crate) fn is_enabled(&self) -> bool {
self.enabled
}
pub(crate) fn is_measure_mode(&self) -> bool {
self.mode.is_measure_mode()
}
pub(crate) fn is_enforce_mode(&self) -> bool {
self.mode.is_enforce_mode()
}
#[cfg(test)]
pub(crate) fn enabled_with_timeout(timeout: Duration) -> Self {
Self {
enabled: true,
mode: Mode::Enforce,
timeout: Some(timeout),
}
}
#[cfg(test)]
pub(crate) fn measure_with_timeout(timeout: Duration) -> Self {
Self {
enabled: true,
mode: Mode::Measure,
timeout: Some(timeout),
}
}
}