Merge pull request #111 from nabijaczleweli/master
Don't space out the first table or array if not needed
This commit is contained in:
commit
89ed04d201
|
@ -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"),
|
||||||
|
|
52
tests/formatting.rs
Normal file
52
tests/formatting.rs
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
extern crate rustc_serialize;
|
||||||
|
extern crate toml;
|
||||||
|
use toml::encode_str;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Hash, PartialEq, Eq, RustcEncodable, RustcDecodable)]
|
||||||
|
struct User {
|
||||||
|
pub name: String,
|
||||||
|
pub surname: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Hash, PartialEq, Eq, RustcEncodable, RustcDecodable)]
|
||||||
|
struct Users {
|
||||||
|
pub user: Vec<User>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Hash, PartialEq, Eq, RustcEncodable, RustcDecodable)]
|
||||||
|
struct TwoUsers {
|
||||||
|
pub user0: User,
|
||||||
|
pub user1: User,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn no_unnecessary_newlines_array() {
|
||||||
|
assert!(!encode_str(&Users {
|
||||||
|
user: vec![
|
||||||
|
User {
|
||||||
|
name: "John".to_string(),
|
||||||
|
surname: "Doe".to_string(),
|
||||||
|
},
|
||||||
|
User {
|
||||||
|
name: "Jane".to_string(),
|
||||||
|
surname: "Dough".to_string(),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
.starts_with("\n"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn no_unnecessary_newlines_table() {
|
||||||
|
assert!(!encode_str(&TwoUsers {
|
||||||
|
user0: User {
|
||||||
|
name: "John".to_string(),
|
||||||
|
surname: "Doe".to_string(),
|
||||||
|
},
|
||||||
|
user1: User {
|
||||||
|
name: "Jane".to_string(),
|
||||||
|
surname: "Dough".to_string(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.starts_with("\n"));
|
||||||
|
}
|
Loading…
Reference in a new issue