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:
parent
4e246b2142
commit
bad367cab0
|
@ -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",
|
||||||
|
|
|
@ -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"));
|
||||||
|
|
3
tests/valid/key-quote-newline.json
Normal file
3
tests/valid/key-quote-newline.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"\n": {"type": "integer", "value": "1"}
|
||||||
|
}
|
1
tests/valid/key-quote-newline.toml
Normal file
1
tests/valid/key-quote-newline.toml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
"\n" = 1
|
Loading…
Reference in a new issue