summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ser/value.rs10
-rw-r--r--tests/test_serialize.rs27
2 files changed, 34 insertions, 3 deletions
diff --git a/src/ser/value.rs b/src/ser/value.rs
index 39d3af0..7a2ac42 100644
--- a/src/ser/value.rs
+++ b/src/ser/value.rs
@@ -158,13 +158,17 @@ impl<'key, 'target, Target> Serializer
}
fn serialize_none(&mut self) -> Result<(), Error> {
- Err(Error::unsupported_value())
+ if let Some(_) = self.key.take() {
+ Ok(())
+ } else {
+ Err(Error::no_key())
+ }
}
- fn serialize_some<T>(&mut self, _value: T) -> Result<(), Error>
+ fn serialize_some<T>(&mut self, value: T) -> Result<(), Error>
where T: Serialize
{
- Err(Error::unsupported_value())
+ value.serialize(self)
}
fn serialize_seq(&mut self, _len: Option<usize>) -> Result<(), Error> {
diff --git a/tests/test_serialize.rs b/tests/test_serialize.rs
new file mode 100644
index 0000000..20592fc
--- /dev/null
+++ b/tests/test_serialize.rs
@@ -0,0 +1,27 @@
+extern crate serde_urlencoded;
+
+#[test]
+fn serialize_option_map_int() {
+ let params = &[
+ ("first", Some(23)),
+ ("middle", None),
+ ("last", Some(42)),
+ ];
+
+ assert_eq!(
+ serde_urlencoded::to_string(params),
+ Ok("first=23&last=42".to_owned()));
+}
+
+#[test]
+fn serialize_option_map_string() {
+ let params = &[
+ ("first", Some("hello")),
+ ("middle", None),
+ ("last", Some("world")),
+ ];
+
+ assert_eq!(
+ serde_urlencoded::to_string(params),
+ Ok("first=hello&last=world".to_owned()));
+}