git.delta.rocks / jrsonnet / refs/commits / 2ec9a620e466

difftreelog

feat configurable array element padding

Yaroslav Bolyukin2021-10-25parent: #ebba949.patch.diff
in: master

3 files changed

modifiedcrates/jrsonnet-evaluator/src/builtin/manifest.rsdiffbeforeafterboth
158}158}
159159
160pub struct ManifestYamlOptions<'s> {160pub struct ManifestYamlOptions<'s> {
161 /// Padding before fields, i.e
162 /// a:
163 /// b:
164 /// ^^ this
161 pub padding: &'s str,165 pub padding: &'s str,
166 /// Padding before array elements in objects
167 /// a:
168 /// - 1
169 /// ^^ this
162 pub pad_arrays: bool,170 pub arr_element_padding: &'s str,
163}171}
164172
165pub fn manifest_yaml_ex(val: &Val, options: &ManifestYamlOptions<'_>) -> Result<String> {173pub fn manifest_yaml_ex(val: &Val, options: &ManifestYamlOptions<'_>) -> Result<String> {
252 if !a.is_empty() {260 if !a.is_empty() {
253 buf.push('\n');261 buf.push('\n');
254 buf.push_str(cur_padding);262 buf.push_str(cur_padding);
255 if options.pad_arrays {
256 buf.push_str(options.padding);263 buf.push_str(options.arr_element_padding);
257 }
258 } else {264 } else {
259 buf.push(' ');265 buf.push(' ');
260 }266 }
271 }277 }
272 let prev_len = cur_padding.len();278 let prev_len = cur_padding.len();
273 if let Val::Arr(a) = &item {279 if let Val::Arr(a) = &item {
274 if !a.is_empty() && options.pad_arrays {280 if !a.is_empty() {
275 cur_padding.push_str(options.padding);281 cur_padding.push_str(options.arr_element_padding);
276 }282 }
277 } else if let Val::Obj(a) = &item {283 } else if let Val::Obj(a) = &item {
278 if !a.is_empty() {284 if !a.is_empty() {
modifiedcrates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth
781 ], {781 ], {
782 Ok(Val::Str(manifest_yaml_ex(&value, &ManifestYamlOptions {782 Ok(Val::Str(manifest_yaml_ex(&value, &ManifestYamlOptions {
783 padding: " ",783 padding: " ",
784 pad_arrays: indent_array_in_object,784 arr_element_padding: if indent_array_in_object { " " } else { "" },
785 })?.into()))785 })?.into()))
786 })786 })
787}787}
modifiedcrates/jrsonnet-evaluator/src/val.rsdiffbeforeafterboth
553 }553 }
554554
555 pub fn to_yaml(&self, padding: usize) -> Result<IStr> {555 pub fn to_yaml(&self, padding: usize) -> Result<IStr> {
556 let padding = &" ".repeat(padding);
556 manifest_yaml_ex(557 manifest_yaml_ex(
557 self,558 self,
558 &ManifestYamlOptions {559 &ManifestYamlOptions {
559 padding: &" ".repeat(padding),560 padding,
560 pad_arrays: true,561 arr_element_padding: padding,
561 },562 },
562 )563 )
563 .map(|s| s.into())564 .map(|s| s.into())