hash_table_datastruct/table/serde_impls/
ser.rs

1use serde::{
2    ser::{SerializeMap, SerializeSeq},
3    Serialize, Serializer,
4};
5
6use crate::{row::borrowed::HashTableRowBorrowed, HashTable};
7
8impl<'t, K, V> Serialize for HashTableRowBorrowed<'t, K, V>
9where
10    K: Serialize,
11    V: Serialize,
12{
13    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
14    where
15        S: serde::Serializer,
16    {
17        let mut state = serializer.serialize_map(Some(self.columns_len()))?;
18        for (k, v) in *self {
19            state.serialize_entry(k, v)?;
20        }
21        state.end()
22    }
23}
24
25impl<K, V> Serialize for HashTable<K, V>
26where
27    K: Serialize,
28    V: Serialize,
29{
30    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
31    where
32        S: serde::Serializer,
33    {
34        let mut state = serializer.serialize_seq(Some(self.rows_len()))?;
35        for row in self {
36            state.serialize_element(&row)?;
37        }
38        state.end()
39    }
40}
41
42/// A function to use in `#[serde(serialize_with = "...")]`
43///
44/// Serializes the table as a map of column keys to column values
45pub fn serialize_hashtable_as_map<S, K, V>(
46    table: &HashTable<K, V>,
47    ser: S,
48) -> Result<S::Ok, S::Error>
49where
50    S: Serializer,
51    K: Serialize,
52    V: Serialize,
53{
54    let mut state = ser.serialize_map(Some(table.columns_len()))?;
55
56    for column in table.iter_columns() {
57        state.serialize_entry(column.column_key(), &column.values)?;
58    }
59
60    state.end()
61}