From 8453323aaf7e35b3c01b16e54d10f255d465b29c Mon Sep 17 00:00:00 2001 From: Sam Scott Date: Sun, 6 Dec 2020 21:25:32 -0500 Subject: Remove extra incorrect replace_spaces in key serialization. Fixes #38 Thanks to @pooyamb for reporting. --- src/ser.rs | 3 ++- tests/test_regression.rs | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 tests/test_regression.rs diff --git a/src/ser.rs b/src/ser.rs index 50d3688..a9f046d 100644 --- a/src/ser.rs +++ b/src/ser.rs @@ -124,7 +124,8 @@ fn replace_space(input: &str) -> Cow { impl<'a, W: 'a + Write> QsSerializer<'a, W> { fn extend_key(&mut self, newkey: &str) { let newkey = - percent_encode(replace_space(newkey).as_bytes(), QS_ENCODE_SET).collect::>(); + percent_encode(newkey.as_bytes(), QS_ENCODE_SET) + .collect::>(); let key = if let Some(ref key) = self.key { format!("{}[{}]", key, newkey).into() } else { diff --git a/tests/test_regression.rs b/tests/test_regression.rs new file mode 100644 index 0000000..7d2f492 --- /dev/null +++ b/tests/test_regression.rs @@ -0,0 +1,25 @@ +extern crate serde; +#[macro_use] +extern crate serde_derive; +extern crate serde_qs as qs; + +#[test] +fn double_encoding_keys() { + #[derive(Debug, Serialize, Deserialize, PartialEq)] + struct Human { + #[serde(rename = "full name")] + name: String, + } + + let human = Human { + name: "John Doe".to_string(), + }; + + let encoded = serde_qs::to_string(&human).unwrap(); + print!("{}", encoded); + assert_eq!( + serde_qs::from_str::(&encoded) + .unwrap(), + human + ); +} -- cgit v1.2.3