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