From 702b2e441196bbcea11ca853c1c0ad926bd1451d Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Fri, 10 Mar 2023 10:51:02 +0100 Subject: [PATCH] fix(ser): Fix serializing certain escaped characters Fixes #7. Closes #9. --- CHANGELOG.adoc | 1 + src/ser.rs | 8 ++++++++ tests/serialize.rs | 11 +++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index a8fbb46..6465c6c 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -13,6 +13,7 @@ == Fixed - fix serializing strings containing `:` +- fix serializing certain escaped characters == [v0.2.4] - 2023-03-01 diff --git a/src/ser.rs b/src/ser.rs index 1364ba2..5674195 100644 --- a/src/ser.rs +++ b/src/ser.rs @@ -142,6 +142,14 @@ impl<'a> serde::ser::Serializer for &'a mut Serializer { self.output.push('\\'); self.output.push('r'); } + '"' => { + self.output.push('\\'); + self.output.push('"'); + } + '\\' => { + self.output.push('\\'); + self.output.push('\\'); + } c => { self.output.push(c); } diff --git a/tests/serialize.rs b/tests/serialize.rs index ffd4945..20854d0 100644 --- a/tests/serialize.rs +++ b/tests/serialize.rs @@ -125,8 +125,15 @@ fn serialize_string() { ("foo\nbar", "\"foo\\nbar\""), ("foo\r\nbar", "\"foo\\r\\nbar\""), ("foo\tbar", "\"foo\\tbar\""), - ("foo/bar", "\"foo\\/bar\""), + ("foo/bar", "foo/bar"), ("foo\\bar", "\"foo\\\\bar\""), + // Regression test for #7. + ("scripts/mods/test\\new", "\"scripts/mods/test\\\\new\""), + // Regression test for #8. + ( + "+002023-03-03T16:42:33.944311860Z", + "\"+002023-03-03T16:42:33.944311860Z\"", + ), ]; for (value, expected) in tests { let expected = format!("value = {expected}\n"); @@ -152,7 +159,7 @@ fn serialize_char() { ('\t', "\"\\t\""), ('\r', "\"\\r\""), ('\\', "\"\\\\\""), - ('/', "\"\\/\""), + ('/', "/"), ('\"', "\"\\\"\""), ('\'', "\"'\""), ];