From d0f4fc3abc89108b71832ec8600bff80a24013f5 Mon Sep 17 00:00:00 2001 From: Hendrik Sollich Date: Fri, 16 Sep 2016 20:06:50 +0200 Subject: [PATCH] fixed: emitter also emits complex keys --- saphyr/src/emitter.rs | 46 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/saphyr/src/emitter.rs b/saphyr/src/emitter.rs index fe9a6e1..2ee7b98 100644 --- a/saphyr/src/emitter.rs +++ b/saphyr/src/emitter.rs @@ -113,6 +113,48 @@ impl<'a> YamlEmitter<'a> { Ok(()) } + fn emit_node_compact(&mut self, node: &Yaml) -> EmitResult { + match *node { + Yaml::Array(ref v) => { + try!(write!(self.writer, "[")); + if self.level >= 0 { + try!(write!(self.writer, "+ ")); + } + self.level += 1; + for (cnt, x) in v.iter().enumerate() { + try!(self.write_indent()); + if cnt > 0 { try!(write!(self.writer, ", ")); } + try!(self.emit_node(x)); + } + self.level -= 1; + try!(write!(self.writer, "]")); + Ok(()) + }, + Yaml::Hash(ref h) => { + try!(self.writer.write_str("{")); + self.level += 1; + for (cnt, (k, v)) in h.iter().enumerate() { + if cnt > 0 { + try!(write!(self.writer, ", ")); + } + match *k { + // complex key is not supported + Yaml::Array(_) | Yaml::Hash(_) => { + return Err(EmitError::BadHashmapKey); + }, + _ => { try!(self.emit_node(k)); } + } + try!(write!(self.writer, ": ")); + try!(self.emit_node(v)); + } + try!(self.writer.write_str("}")); + self.level -= 1; + Ok(()) + }, + _ => self.emit_node(node) + } + } + fn emit_node(&mut self, node: &Yaml) -> EmitResult { match *node { Yaml::Array(ref v) => { @@ -151,9 +193,9 @@ impl<'a> YamlEmitter<'a> { } try!(self.write_indent()); match *k { - // complex key is not supported Yaml::Array(_) | Yaml::Hash(_) => { - return Err(EmitError::BadHashmapKey); + try!(self.emit_node_compact(k)); + //return Err(EmitError::BadHashmapKey); }, _ => { try!(self.emit_node(k)); } }