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> {
31 let seconds =
32 self.seconds_spent_limit.unwrap_or(0) + self.minutes_spent_limit.unwrap_or(0) * 60;
33 if seconds > 0 {
34 Some(Duration::from_secs(seconds))
35 } else {
36 None
37 }
38 }
39
40 pub fn unimproved_time_limit(&self) -> Option<Duration> {
42 self.unimproved_seconds_spent_limit.map(Duration::from_secs)
43 }
44}