From bad367cab08f1bb519742c6196aa38fe464631aa Mon Sep 17 00:00:00 2001 From: Alan Du Date: Thu, 1 Jun 2017 20:54:17 +0100 Subject: [PATCH] Allow serializing keys with \n in them Use special quoted form Closes https://github.com/alexcrichton/toml-rs/issues/185 --- src/ser.rs | 8 -------- tests/valid.rs | 3 +++ tests/valid/key-quote-newline.json | 3 +++ tests/valid/key-quote-newline.toml | 1 + 4 files changed, 7 insertions(+), 8 deletions(-) create mode 100644 tests/valid/key-quote-newline.json create mode 100644 tests/valid/key-quote-newline.toml diff --git a/src/ser.rs b/src/ser.rs index 8f6b366..9fa0678 100644 --- a/src/ser.rs +++ b/src/ser.rs @@ -107,9 +107,6 @@ pub enum Error { /// attempted where the key of a map was not a string. KeyNotString, - /// Keys in maps are not allowed to have newlines. - KeyNewline, - /// Arrays in TOML must have a homogenous type, but a heterogeneous array /// was emitted. ArrayMixedType, @@ -624,9 +621,6 @@ impl<'a, 'b> ser::SerializeMap for SerializeTable<'a, 'b> { SerializeTable::Table { ref mut key, .. } => { key.truncate(0); *key = input.serialize(StringExtractor)?; - if key.contains('\n') { - return Err(Error::KeyNewline) - } } } Ok(()) @@ -1047,7 +1041,6 @@ impl fmt::Display for Error { match *self { Error::UnsupportedType => "unsupported Rust type".fmt(f), Error::KeyNotString => "map key was not a string".fmt(f), - Error::KeyNewline => "map keys cannot contain newlines".fmt(f), Error::ArrayMixedType => "arrays cannot have mixed types".fmt(f), Error::ValueAfterTable => "values must be emitted before tables".fmt(f), Error::DateInvalid => "a serialized date was invalid".fmt(f), @@ -1064,7 +1057,6 @@ impl error::Error for Error { match *self { Error::UnsupportedType => "unsupported Rust type", Error::KeyNotString => "map key was not a string", - Error::KeyNewline => "map keys cannot contain newlines", Error::ArrayMixedType => "arrays cannot have mixed types", Error::ValueAfterTable => "values must be emitted before tables", Error::DateInvalid => "a serialized date was invalid", diff --git a/tests/valid.rs b/tests/valid.rs index b3cc096..e7577ad 100644 --- a/tests/valid.rs +++ b/tests/valid.rs @@ -193,6 +193,9 @@ test!(example_bom, test!(datetime_truncate, include_str!("valid/datetime-truncate.toml"), include_str!("valid/datetime-truncate.json")); +test!(key_quote_newline, + include_str!("valid/key-quote-newline.toml"), + include_str!("valid/key-quote-newline.json")); test!(table_array_nest_no_keys, include_str!("valid/table-array-nest-no-keys.toml"), include_str!("valid/table-array-nest-no-keys.json")); diff --git a/tests/valid/key-quote-newline.json b/tests/valid/key-quote-newline.json new file mode 100644 index 0000000..12473e4 --- /dev/null +++ b/tests/valid/key-quote-newline.json @@ -0,0 +1,3 @@ +{ + "\n": {"type": "integer", "value": "1"} +} diff --git a/tests/valid/key-quote-newline.toml b/tests/valid/key-quote-newline.toml new file mode 100644 index 0000000..a2639bf --- /dev/null +++ b/tests/valid/key-quote-newline.toml @@ -0,0 +1 @@ +"\n" = 1