linuxkit-utils 0.1.0

an utility to compose linuxkit manifests
Documentation
use super::*;

use ::serde_yaml::Value as JsValue;

impl EnvSubst for JsValue {
    fn env_subst(&self, context: &HashMap<String, String>) -> Result<Self, SubstError> {
        match self {
            JsValue::Bool(_) => Ok(self.to_owned()),
            JsValue::Null => Ok(self.to_owned()),
            JsValue::Number(_) => Ok(self.to_owned()),
            JsValue::String(s) => Ok(JsValue::String(s.env_subst(context)?)),
            JsValue::Sequence(items) => Ok(JsValue::Sequence(
                items
                    .iter()
                    .map(|item| item.env_subst(context))
                    .collect::<Result<Vec<_>, _>>()?,
            )),
            JsValue::Mapping(mapping) => {
                let mapping = mapping
                    .iter()
                    .map(|(k, v)| {
                        k.env_subst(context)
                            .and_then(|k| v.env_subst(context).map(move |v| (k, v)))
                    })
                    .collect::<Result<_, _>>()?;
                Ok(JsValue::Mapping(mapping))
            }
        }
    }
}