--- a/crates/jrsonnet-evaluator/src/builtin/manifest.rs +++ b/crates/jrsonnet-evaluator/src/builtin/manifest.rs @@ -158,8 +158,16 @@ } pub struct ManifestYamlOptions<'s> { + /// Padding before fields, i.e + /// a: + /// b: + /// ^^ this pub padding: &'s str, - pub pad_arrays: bool, + /// Padding before array elements in objects + /// a: + /// - 1 + /// ^^ this + pub arr_element_padding: &'s str, } pub fn manifest_yaml_ex(val: &Val, options: &ManifestYamlOptions<'_>) -> Result { @@ -252,9 +260,7 @@ if !a.is_empty() { buf.push('\n'); buf.push_str(cur_padding); - if options.pad_arrays { - buf.push_str(options.padding); - } + buf.push_str(options.arr_element_padding); } else { buf.push(' '); } @@ -271,8 +277,8 @@ } let prev_len = cur_padding.len(); if let Val::Arr(a) = &item { - if !a.is_empty() && options.pad_arrays { - cur_padding.push_str(options.padding); + if !a.is_empty() { + cur_padding.push_str(options.arr_element_padding); } } else if let Val::Obj(a) = &item { if !a.is_empty() { --- a/crates/jrsonnet-evaluator/src/builtin/mod.rs +++ b/crates/jrsonnet-evaluator/src/builtin/mod.rs @@ -781,7 +781,7 @@ ], { Ok(Val::Str(manifest_yaml_ex(&value, &ManifestYamlOptions { padding: " ", - pad_arrays: indent_array_in_object, + arr_element_padding: if indent_array_in_object { " " } else { "" }, })?.into())) }) } --- a/crates/jrsonnet-evaluator/src/val.rs +++ b/crates/jrsonnet-evaluator/src/val.rs @@ -553,11 +553,12 @@ } pub fn to_yaml(&self, padding: usize) -> Result { + let padding = &" ".repeat(padding); manifest_yaml_ex( self, &ManifestYamlOptions { - padding: &" ".repeat(padding), - pad_arrays: true, + padding, + arr_element_padding: padding, }, ) .map(|s| s.into())