elasticsearch_dsl/util/
key_value_pair.rs

1use 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    /// Creates an instance of [`KeyValuePair`]
11    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}