From 4ec27ff42661e30ad0849b9668d62e039454b0b6 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Tue, 13 Aug 2019 09:48:13 -0500 Subject: [PATCH] DEV: Collapse fields when merging yaml maps --- src/convert/yaml.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/convert/yaml.rs b/src/convert/yaml.rs index 22cc170..54ba689 100644 --- a/src/convert/yaml.rs +++ b/src/convert/yaml.rs @@ -1,4 +1,5 @@ use std; +use std::collections::BTreeSet; use std::error::Error; use std::io::Write; use std::rc::Rc; @@ -123,7 +124,17 @@ impl YamlConverter { serde_yaml::Value::Mapping(m) => { let mut fs = Vec::with_capacity(m.len()); self.merge_mapping_keys(&mut fs, m)?; - Val::Tuple(fs) + fs.reverse(); + let mut seen_keys = BTreeSet::new(); + let mut collapsed = Vec::with_capacity(fs.len()); + for (k, val) in fs { + if !seen_keys.contains(&k) { + collapsed.push((k.clone(), val)); + seen_keys.insert(k); + } + } + collapsed.reverse(); + Val::Tuple(collapsed) } }) }