solverforge_config/
termination.rs1use std::time::Duration;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Default, Deserialize, Serialize)]
7#[serde(rename_all = "snake_case")]
8pub struct TerminationConfig {
9 pub seconds_spent_limit: Option<u64>,
11
12 pub minutes_spent_limit: Option<u64>,
14
15 pub best_score_limit: Option<String>,
17
18 pub step_count_limit: Option<u64>,
20
21 pub unimproved_step_count_limit: Option<u64>,
23
24 pub unimproved_seconds_spent_limit: Option<u64>,
26}
27
28impl TerminationConfig {
29 pub fn time_limit(&self) -> Option<Duration> {
30 let seconds =
31 self.seconds_spent_limit.unwrap_or(0) + self.minutes_spent_limit.unwrap_or(0) * 60;
32 if seconds > 0 {
33 Some(Duration::from_secs(seconds))
34 } else {
35 None
36 }
37 }
38
39 pub fn unimproved_time_limit(&self) -> Option<Duration> {
40 self.unimproved_seconds_spent_limit.map(Duration::from_secs)
41 }
42}