summaryrefslogtreecommitdiffstats
path: root/third_party/rust/serde_urlencoded/src/ser/key.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /third_party/rust/serde_urlencoded/src/ser/key.rs
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/serde_urlencoded/src/ser/key.rs')
-rw-r--r--third_party/rust/serde_urlencoded/src/ser/key.rs77
1 files changed, 77 insertions, 0 deletions
diff --git a/third_party/rust/serde_urlencoded/src/ser/key.rs b/third_party/rust/serde_urlencoded/src/ser/key.rs
new file mode 100644
index 0000000000..8128a64ebb
--- /dev/null
+++ b/third_party/rust/serde_urlencoded/src/ser/key.rs
@@ -0,0 +1,77 @@
+use crate::ser::part::Sink;
+use crate::ser::Error;
+use serde::Serialize;
+use std::borrow::Cow;
+use std::ops::Deref;
+
+pub enum Key<'key> {
+ Static(&'static str),
+ Dynamic(Cow<'key, str>),
+}
+
+impl<'key> Deref for Key<'key> {
+ type Target = str;
+
+ fn deref(&self) -> &str {
+ match *self {
+ Key::Static(key) => key,
+ Key::Dynamic(ref key) => key,
+ }
+ }
+}
+
+impl<'key> From<Key<'key>> for Cow<'static, str> {
+ fn from(key: Key<'key>) -> Self {
+ match key {
+ Key::Static(key) => key.into(),
+ Key::Dynamic(key) => key.into_owned().into(),
+ }
+ }
+}
+
+pub struct KeySink<End> {
+ end: End,
+}
+
+impl<End, Ok> KeySink<End>
+where
+ End: for<'key> FnOnce(Key<'key>) -> Result<Ok, Error>,
+{
+ pub fn new(end: End) -> Self {
+ KeySink { end }
+ }
+}
+
+impl<End, Ok> Sink for KeySink<End>
+where
+ End: for<'key> FnOnce(Key<'key>) -> Result<Ok, Error>,
+{
+ type Ok = Ok;
+
+ fn serialize_static_str(self, value: &'static str) -> Result<Ok, Error> {
+ (self.end)(Key::Static(value))
+ }
+
+ fn serialize_str(self, value: &str) -> Result<Ok, Error> {
+ (self.end)(Key::Dynamic(value.into()))
+ }
+
+ fn serialize_string(self, value: String) -> Result<Ok, Error> {
+ (self.end)(Key::Dynamic(value.into()))
+ }
+
+ fn serialize_none(self) -> Result<Ok, Error> {
+ Err(self.unsupported())
+ }
+
+ fn serialize_some<T: ?Sized + Serialize>(
+ self,
+ _value: &T,
+ ) -> Result<Ok, Error> {
+ Err(self.unsupported())
+ }
+
+ fn unsupported(self) -> Error {
+ Error::Custom("unsupported key".into())
+ }
+}