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)]
13 pub simulation: SimulationConfig,
14}
15
16impl Default for TimeConfig {
17 fn default() -> Self {
18 Self {
19 realtime: true,
20 simulation: SimulationConfig::default(),
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}
41
42impl Default for SimulationConfig {
43 fn default() -> Self {
44 Self {
45 start_at: chrono::DateTime::parse_from_rfc3339("2021-01-01T00:00:00Z")
46 .unwrap()
47 .with_timezone(&Utc),
48 tick_interval_ms: 1,
49 tick_duration_secs: std::time::Duration::from_secs(1000),
50 transform_to_realtime: false,
51 }
52 }
53}