1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use serde_with::serde_as;
4
5#[derive(Clone, Debug, Serialize, Deserialize)]
6pub struct TimeConfig {
7 pub(super) realtime: bool,
8 #[serde(default, skip_serializing_if = "Option::is_none")]
9 pub(super) sim_time: Option<SimTimeConfig>,
10}
11
12impl Default for TimeConfig {
13 fn default() -> Self {
14 Self {
15 realtime: true,
16 sim_time: None,
17 }
18 }
19}
20
21#[serde_as]
22#[derive(Clone, Debug, Deserialize, Serialize)]
23pub struct SimTimeConfig {
24 #[serde(default = "Utc::now")]
25 pub(super) start_at: DateTime<Utc>,
26 pub(super) tick_interval_ms: u64,
27 #[serde_as(as = "serde_with::DurationSeconds<u64>")]
28 pub(super) tick_duration_secs: std::time::Duration,
29 #[serde(default)]
30 pub(super) transform_to_realtime: bool,
31}