diff options
-rw-r--r-- | src/ser/value.rs | 10 | ||||
-rw-r--r-- | tests/test_serialize.rs | 27 |
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())); +} |