vegafusion_runtime/task_graph/
timezone.rs

1use std::str::FromStr;
2use vegafusion_core::error::Result;
3use vegafusion_core::error::ResultWithContext;
4
5#[derive(Copy, Clone, Debug)]
6pub struct RuntimeTzConfig {
7    pub local_tz: chrono_tz::Tz,
8    pub default_input_tz: chrono_tz::Tz,
9}
10
11impl RuntimeTzConfig {
12    pub fn try_new(local_tz: &str, default_input_tz: &Option<String>) -> Result<Self> {
13        let local_tz = chrono_tz::Tz::from_str(local_tz)
14            .ok()
15            .with_context(|| format!("Failed to parse {local_tz} as timezone"))?;
16        let default_input_tz = default_input_tz
17            .clone()
18            .unwrap_or_else(|| local_tz.to_string());
19        let default_input_tz = chrono_tz::Tz::from_str(&default_input_tz)
20            .ok()
21            .with_context(|| format!("Failed to parse {default_input_tz} as timezone"))?;
22        Ok(Self {
23            local_tz,
24            default_input_tz,
25        })
26    }
27}