Allow serializing keys with \n in them

Use special quoted form

Closes https://github.com/alexcrichton/toml-rs/issues/185
This commit is contained in:
Alan Du 2017-06-01 20:54:17 +01:00
parent 4e246b2142
commit bad367cab0
4 changed files with 7 additions and 8 deletions

View file

@ -107,9 +107,6 @@ pub enum Error {
/// attempted where the key of a map was not a string. /// attempted where the key of a map was not a string.
KeyNotString, KeyNotString,
/// Keys in maps are not allowed to have newlines.
KeyNewline,
/// Arrays in TOML must have a homogenous type, but a heterogeneous array /// Arrays in TOML must have a homogenous type, but a heterogeneous array
/// was emitted. /// was emitted.
ArrayMixedType, ArrayMixedType,
@ -624,9 +621,6 @@ impl<'a, 'b> ser::SerializeMap for SerializeTable<'a, 'b> {
SerializeTable::Table { ref mut key, .. } => { SerializeTable::Table { ref mut key, .. } => {
key.truncate(0); key.truncate(0);
*key = input.serialize(StringExtractor)?; *key = input.serialize(StringExtractor)?;
if key.contains('\n') {
return Err(Error::KeyNewline)
}
} }
} }
Ok(()) Ok(())
@ -1047,7 +1041,6 @@ impl fmt::Display for Error {
match *self { match *self {
Error::UnsupportedType => "unsupported Rust type".fmt(f), Error::UnsupportedType => "unsupported Rust type".fmt(f),
Error::KeyNotString => "map key was not a string".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::ArrayMixedType => "arrays cannot have mixed types".fmt(f),
Error::ValueAfterTable => "values must be emitted before tables".fmt(f), Error::ValueAfterTable => "values must be emitted before tables".fmt(f),
Error::DateInvalid => "a serialized date was invalid".fmt(f), Error::DateInvalid => "a serialized date was invalid".fmt(f),
@ -1064,7 +1057,6 @@ impl error::Error for Error {
match *self { match *self {
Error::UnsupportedType => "unsupported Rust type", Error::UnsupportedType => "unsupported Rust type",
Error::KeyNotString => "map key was not a string", Error::KeyNotString => "map key was not a string",
Error::KeyNewline => "map keys cannot contain newlines",
Error::ArrayMixedType => "arrays cannot have mixed types", Error::ArrayMixedType => "arrays cannot have mixed types",
Error::ValueAfterTable => "values must be emitted before tables", Error::ValueAfterTable => "values must be emitted before tables",
Error::DateInvalid => "a serialized date was invalid", Error::DateInvalid => "a serialized date was invalid",

View file

@ -193,6 +193,9 @@ test!(example_bom,
test!(datetime_truncate, test!(datetime_truncate,
include_str!("valid/datetime-truncate.toml"), include_str!("valid/datetime-truncate.toml"),
include_str!("valid/datetime-truncate.json")); 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, test!(table_array_nest_no_keys,
include_str!("valid/table-array-nest-no-keys.toml"), include_str!("valid/table-array-nest-no-keys.toml"),
include_str!("valid/table-array-nest-no-keys.json")); include_str!("valid/table-array-nest-no-keys.json"));

View file

@ -0,0 +1,3 @@
{
"\n": {"type": "integer", "value": "1"}
}

View file

@ -0,0 +1 @@
"\n" = 1