summaryrefslogtreecommitdiff
path: root/src/ser/value.rs
diff options
context:
space:
mode:
authorSam Scott <sam.scott89@gmail.com>2017-02-15 17:43:33 +0000
committerSam Scott <sam.scott89@gmail.com>2017-02-15 17:43:50 +0000
commit4a6b46f9222cad61ceb8e9246b4cc33eb4f61f57 (patch)
tree735a7cc371bcf6025eaecfb1acf8dec317d0e928 /src/ser/value.rs
parentc0457909e41735b17b66e11a1d2cf1660f6b3c6d (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.rs26
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(())
+ }
+}
+