summaryrefslogtreecommitdiffstats
path: root/third_party/rust/serde_urlencoded/src/ser/value.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/serde_urlencoded/src/ser/value.rs')
-rw-r--r--third_party/rust/serde_urlencoded/src/ser/value.rs62
1 files changed, 62 insertions, 0 deletions
diff --git a/third_party/rust/serde_urlencoded/src/ser/value.rs b/third_party/rust/serde_urlencoded/src/ser/value.rs
new file mode 100644
index 0000000000..e8823ce703
--- /dev/null
+++ b/third_party/rust/serde_urlencoded/src/ser/value.rs
@@ -0,0 +1,62 @@
+use crate::ser::part::{PartSerializer, Sink};
+use crate::ser::Error;
+use form_urlencoded::Serializer as UrlEncodedSerializer;
+use form_urlencoded::Target as UrlEncodedTarget;
+use serde::ser::Serialize;
+use std::str;
+
+pub struct ValueSink<'input, 'key, 'target, Target>
+where
+ Target: UrlEncodedTarget,
+{
+ urlencoder: &'target mut UrlEncodedSerializer<'input, Target>,
+ key: &'key str,
+}
+
+impl<'input, 'key, 'target, Target> ValueSink<'input, 'key, 'target, Target>
+where
+ Target: 'target + UrlEncodedTarget,
+{
+ pub fn new(
+ urlencoder: &'target mut UrlEncodedSerializer<'input, Target>,
+ key: &'key str,
+ ) -> Self {
+ ValueSink { urlencoder, key }
+ }
+}
+
+impl<'input, 'key, 'target, Target> Sink
+ for ValueSink<'input, 'key, 'target, Target>
+where
+ Target: 'target + UrlEncodedTarget,
+{
+ type Ok = ();
+
+ fn serialize_str(self, value: &str) -> Result<(), Error> {
+ self.urlencoder.append_pair(self.key, value);
+ Ok(())
+ }
+
+ fn serialize_static_str(self, value: &'static str) -> Result<(), Error> {
+ self.serialize_str(value)
+ }
+
+ fn serialize_string(self, value: String) -> Result<(), Error> {
+ self.serialize_str(&value)
+ }
+
+ fn serialize_none(self) -> Result<Self::Ok, Error> {
+ Ok(())
+ }
+
+ fn serialize_some<T: ?Sized + Serialize>(
+ self,
+ value: &T,
+ ) -> Result<Self::Ok, Error> {
+ value.serialize(PartSerializer::new(self))
+ }
+
+ fn unsupported(self) -> Error {
+ Error::Custom("unsupported value".into())
+ }
+}