aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ser.rs21
-rw-r--r--tests/pretty.rs48
2 files changed, 65 insertions, 4 deletions
diff --git a/src/ser.rs b/src/ser.rs
index 13d4584..3c4c220 100644
--- a/src/ser.rs
+++ b/src/ser.rs
@@ -628,12 +628,25 @@ impl<'a> Serializer<'a> {
}
match *state {
- State::Table { first, .. } |
- State::Array { parent: &State::Table { first, .. }, .. } => {
+ State::Table { first, .. } => {
if !first.get() {
- self.dst.push_str("\n");
+ // Newline if we are a table that is not the first
+ // table in the document.
+ self.dst.push('\n');
}
- }
+ },
+ State::Array { parent, first, .. } => {
+ if !first.get() {
+ // Always newline if we are not the first item in the
+ // table-array
+ self.dst.push('\n');
+ } else if let State::Table { first, .. } = *parent {
+ if !first.get() {
+ // Newline if we are not the first item in the document
+ self.dst.push('\n');
+ }
+ }
+ },
_ => {}
}
self.dst.push_str("[");
diff --git a/tests/pretty.rs b/tests/pretty.rs
index cceb815..3a9777c 100644
--- a/tests/pretty.rs
+++ b/tests/pretty.rs
@@ -212,3 +212,51 @@ fn pretty_tricky() {
println!("\nRESULT:\n{}", result);
assert_eq!(toml, &result);
}
+
+const PRETTY_TABLE_ARRAY: &'static str = r##"[[array]]
+key = 'foo'
+
+[[array]]
+key = 'bar'
+
+[abc]
+doc = 'this is a table'
+
+[example]
+single = 'this is a single line string'
+"##;
+
+#[test]
+fn pretty_table_array() {
+ let toml = PRETTY_TABLE_ARRAY;
+ let value: toml::Value = toml::from_str(toml).unwrap();
+ let mut result = String::with_capacity(128);
+ value.serialize(&mut toml::Serializer::pretty(&mut result)).unwrap();
+ println!("EXPECTED:\n{}", toml);
+ println!("\nRESULT:\n{}", result);
+ assert_eq!(toml, &result);
+}
+
+const TABLE_ARRAY: &'static str = r##"[[array]]
+key = "foo"
+
+[[array]]
+key = "bar"
+
+[abc]
+doc = "this is a table"
+
+[example]
+single = "this is a single line string"
+"##;
+
+#[test]
+fn table_array() {
+ let toml = TABLE_ARRAY;
+ let value: toml::Value = toml::from_str(toml).unwrap();
+ let mut result = String::with_capacity(128);
+ value.serialize(&mut toml::Serializer::new(&mut result)).unwrap();
+ println!("EXPECTED:\n{}", toml);
+ println!("\nRESULT:\n{}", result);
+ assert_eq!(toml, &result);
+}