linuxkit_utils/env_subst/
for_jsvalue.rs

1use super::*;
2
3use ::serde_yaml::Value as JsValue;
4
5impl EnvSubst for JsValue {
6    fn env_subst(&self, context: &HashMap<String, String>) -> Result<Self, SubstError> {
7        match self {
8            JsValue::Bool(_) => Ok(self.to_owned()),
9            JsValue::Null => Ok(self.to_owned()),
10            JsValue::Number(_) => Ok(self.to_owned()),
11            JsValue::String(s) => Ok(JsValue::String(s.env_subst(context)?)),
12            JsValue::Sequence(items) => Ok(JsValue::Sequence(
13                items
14                    .iter()
15                    .map(|item| item.env_subst(context))
16                    .collect::<Result<Vec<_>, _>>()?,
17            )),
18            JsValue::Mapping(mapping) => {
19                let mapping = mapping
20                    .iter()
21                    .map(|(k, v)| {
22                        k.env_subst(context)
23                            .and_then(|k| v.env_subst(context).map(move |v| (k, v)))
24                    })
25                    .collect::<Result<_, _>>()?;
26                Ok(JsValue::Mapping(mapping))
27            }
28        }
29    }
30}