solti_model/domain/environment/
task.rs1env_newtype! {
9 pub struct TaskEnv;
23}
24
25impl TaskEnv {
26 #[inline]
37 pub fn single<K, V>(key: K, value: V) -> Self
38 where
39 K: Into<String>,
40 V: Into<String>,
41 {
42 let mut env = Self::new();
43 env.push(key, value);
44 env
45 }
46}
47
48#[cfg(test)]
49mod tests {
50 use super::TaskEnv;
51
52 #[test]
53 fn constructors_iteration_and_lookup_preserve_last_value() {
54 let mut env = TaskEnv::new();
55 assert!(env.is_empty());
56
57 env.push("FOO", "one");
58 env.push("BAR", "x");
59 env.push("FOO", "two");
60
61 assert_eq!(env.len(), 3);
62 assert_eq!(env.iter().next().unwrap().key(), "FOO");
63 assert_eq!(env.get("FOO"), Some("two"));
64 assert_eq!(env.get("BAR"), Some("x"));
65 assert!(env.get("BAZ").is_none());
66
67 let single = TaskEnv::single("ONLY", "value");
68 assert_eq!(single.len(), 1);
69 assert_eq!(single.get("ONLY"), Some("value"));
70 }
71
72 #[test]
73 fn serde_is_transparent_and_preserves_entries() {
74 let mut env = TaskEnv::new();
75 env.push("FOO", "bar");
76 env.push("BAZ", "qux");
77
78 let json = serde_json::to_string(&env).unwrap();
79 assert_eq!(
80 json,
81 r#"[{"key":"FOO","value":"bar"},{"key":"BAZ","value":"qux"}]"#
82 );
83 let back: TaskEnv = serde_json::from_str(&json).unwrap();
84 assert_eq!(back, env);
85 }
86}