summaryrefslogtreecommitdiff
path: root/src/ser/value.rs
diff options
context:
space:
mode:
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(())
+ }
+}
+