elasticsearch_dsl/util/
key_value_pair.rs1use serde::ser::{Serialize, SerializeMap, Serializer};
2
3#[derive(Clone, PartialEq, Eq)]
4pub(crate) struct KeyValuePair<K, V> {
5 pub(crate) key: K,
6 pub(crate) value: V,
7}
8
9impl<K, V> KeyValuePair<K, V> {
10 pub(crate) fn new(key: K, value: V) -> Self {
12 Self { key, value }
13 }
14}
15
16impl<K, V> std::fmt::Debug for KeyValuePair<K, V>
17where
18 K: std::fmt::Debug + AsRef<str>,
19 V: std::fmt::Debug,
20{
21 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22 f.debug_struct("KeyValuePair")
23 .field(self.key.as_ref(), &self.value)
24 .finish()
25 }
26}
27
28impl<K, V> Serialize for KeyValuePair<K, V>
29where
30 K: Serialize,
31 V: Serialize,
32{
33 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
34 where
35 S: Serializer,
36 {
37 let mut map = serializer.serialize_map(Some(1))?;
38 map.serialize_entry(&self.key, &self.value)?;
39 map.end()
40 }
41}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46 use crate::util::*;
47
48 #[test]
49 fn serializes_as_key_value_pair() {
50 assert_serialize(KeyValuePair::new("key", "value"), json!({ "key": "value" }));
51 }
52}