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

View File

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