use std::time::Duration;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub struct TerminationConfig {
pub seconds_spent_limit: Option<u64>,
pub minutes_spent_limit: Option<u64>,
pub best_score_limit: Option<String>,
pub step_count_limit: Option<u64>,
pub unimproved_step_count_limit: Option<u64>,
pub unimproved_seconds_spent_limit: Option<u64>,
}
impl TerminationConfig {
pub fn time_limit(&self) -> Option<Duration> {
let seconds =
self.seconds_spent_limit.unwrap_or(0) + self.minutes_spent_limit.unwrap_or(0) * 60;
if seconds > 0 {
Some(Duration::from_secs(seconds))
} else {
None
}
}
pub fn unimproved_time_limit(&self) -> Option<Duration> {
self.unimproved_seconds_spent_limit.map(Duration::from_secs)
}
}