diff options
author | Sam Scott <sam.scott89@gmail.com> | 2017-02-15 17:43:33 +0000 |
---|---|---|
committer | Sam Scott <sam.scott89@gmail.com> | 2017-02-15 17:43:50 +0000 |
commit | 4a6b46f9222cad61ceb8e9246b4cc33eb4f61f57 (patch) | |
tree | 735a7cc371bcf6025eaecfb1acf8dec317d0e928 /src/ser/value.rs | |
parent | c0457909e41735b17b66e11a1d2cf1660f6b3c6d (diff) |
Some _very_ hacky code to get nested url_encoded params working.
Diffstat (limited to 'src/ser/value.rs')
-rw-r--r-- | src/ser/value.rs | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/ser/value.rs b/src/ser/value.rs index e4e1f2c..56b410e 100644 --- a/src/ser/value.rs +++ b/src/ser/value.rs @@ -1,6 +1,6 @@ use ser::Error; use ser::part::{PartSerializer, Sink}; -use serde::ser::Serialize; +use serde::ser::{Serialize, SerializeStruct}; use std::str; use url::form_urlencoded::Serializer as UrlEncodedSerializer; use url::form_urlencoded::Target as UrlEncodedTarget; @@ -28,7 +28,7 @@ impl<'key, 'target, Target> ValueSink<'key, 'target, Target> impl<'key, 'target, Target> Sink for ValueSink<'key, 'target, Target> where Target: 'target + UrlEncodedTarget, { - type Ok = (); + // type Ok = (); fn serialize_str(self, value: &str) -> Result<(), Error> { self.urlencoder.append_pair(self.key, value); @@ -57,3 +57,25 @@ impl<'key, 'target, Target> Sink for ValueSink<'key, 'target, Target> Error::Custom("unsupported value".into()) } } + + +impl<'key, 'target, Target> SerializeStruct for ValueSink<'key, 'target, Target> + where Target: 'target + UrlEncodedTarget, +{ + type Ok = (); + type Error = Error; + + fn serialize_field<T: ?Sized + Serialize>(&mut self, + key: &'static str, + value: &T) + -> Result<(), Error> { + let newk = format!("{}[{}]", self.key, key); + let value_sink = ValueSink::new(self.urlencoder, &newk); + value.serialize(super::part::PartSerializer::new(value_sink)) + } + + fn end(self) -> Result<Self::Ok, Error> { + Ok(()) + } +} + |