Forbid serializing nested lists

This commit is contained in:
Jonas Platte 2020-05-15 11:49:48 +02:00
parent 73a46d6b21
commit 338ef529e1
No known key found for this signature in database
GPG Key ID: 7D261D771D915378
2 changed files with 13 additions and 4 deletions

View File

@ -16,6 +16,7 @@ where
{
urlencoder: &'target mut UrlEncodedSerializer<'input, Target>,
key: &'key str,
nested: bool,
}
impl<'input, 'key, 'target, Target> ValueSink<'input, 'key, 'target, Target>
@ -26,7 +27,11 @@ where
urlencoder: &'target mut UrlEncodedSerializer<'input, Target>,
key: &'key str,
) -> Self {
ValueSink { urlencoder, key }
ValueSink {
urlencoder,
key,
nested: false,
}
}
}
@ -63,7 +68,11 @@ where
}
fn serialize_seq(self) -> Result<Self, Error> {
Ok(self)
if self.nested {
Err(self.unsupported())
} else {
Ok(self)
}
}
fn unsupported(self) -> Error {
@ -89,6 +98,7 @@ where
value.serialize(PartSerializer::new(ValueSink {
urlencoder: self.urlencoder,
key: self.key,
nested: true,
}))
}

View File

@ -115,12 +115,11 @@ fn serialize_multiple_lists() {
}
#[test]
#[ignore]
fn serialize_nested_list() {
let params = &[("list", vec![vec![0u8]])];
assert_matches!(
urlencoded::to_string(params),
Err(Error::Custom(s)) if s.contains("Unsupported")
Err(Error::Custom(s)) if s.contains("unsupported")
)
}