hash_table_datastruct/table/serde_impls/
ser.rs1use 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
42pub 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}