DEV: Collapse fields when merging yaml maps

This commit is contained in:
Jeremy Wall 2019-08-13 09:48:13 -05:00
parent 949d468f55
commit 4ec27ff426

View File

@ -1,4 +1,5 @@
use std; use std;
use std::collections::BTreeSet;
use std::error::Error; use std::error::Error;
use std::io::Write; use std::io::Write;
use std::rc::Rc; use std::rc::Rc;
@ -123,7 +124,17 @@ impl YamlConverter {
serde_yaml::Value::Mapping(m) => { serde_yaml::Value::Mapping(m) => {
let mut fs = Vec::with_capacity(m.len()); let mut fs = Vec::with_capacity(m.len());
self.merge_mapping_keys(&mut fs, m)?; 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)
} }
}) })
} }