Don't space out the first table or array if not needed

Closes #110
This commit is contained in:
nabijaczleweli 2016-09-06 09:00:35 +02:00
parent ccf3977221
commit 594b845b5a

View file

@ -57,6 +57,7 @@ fn write_str(f: &mut fmt::Formatter, s: &str) -> fmt::Result {
impl<'a, 'b> Printer<'a, 'b> { impl<'a, 'b> Printer<'a, 'b> {
fn print(&mut self, table: &'a TomlTable) -> fmt::Result { fn print(&mut self, table: &'a TomlTable) -> fmt::Result {
let mut space_out_first = false;
for (k, v) in table.iter() { for (k, v) in table.iter() {
match *v { match *v {
Table(..) => continue, Table(..) => continue,
@ -67,13 +68,17 @@ impl<'a, 'b> Printer<'a, 'b> {
} }
_ => {} _ => {}
} }
space_out_first = true;
try!(writeln!(self.output, "{} = {}", Key(&[k]), v)); try!(writeln!(self.output, "{} = {}", Key(&[k]), v));
} }
for (k, v) in table.iter() { for (i, (k, v)) in table.iter().enumerate() {
match *v { match *v {
Table(ref inner) => { Table(ref inner) => {
self.stack.push(k); self.stack.push(k);
try!(writeln!(self.output, "\n[{}]", Key(&self.stack))); if space_out_first || i != 0 {
try!(write!(self.output, "\n"));
}
try!(writeln!(self.output, "[{}]", Key(&self.stack)));
try!(self.print(inner)); try!(self.print(inner));
self.stack.pop(); self.stack.pop();
} }
@ -83,8 +88,11 @@ impl<'a, 'b> Printer<'a, 'b> {
_ => continue _ => continue
} }
self.stack.push(k); self.stack.push(k);
for inner in inner.iter() { for (j, inner) in inner.iter().enumerate() {
try!(writeln!(self.output, "\n[[{}]]", Key(&self.stack))); if space_out_first || i != 0 || j != 0 {
try!(write!(self.output, "\n"));
}
try!(writeln!(self.output, "[[{}]]", Key(&self.stack)));
match *inner { match *inner {
Table(ref inner) => try!(self.print(inner)), Table(ref inner) => try!(self.print(inner)),
_ => panic!("non-heterogeneous toml array"), _ => panic!("non-heterogeneous toml array"),