1use crate::durability::Durability;
5use crate::plumbing::QueryStorageOps;
6use crate::Query;
7use crate::QueryTable;
8use std::iter::FromIterator;
9
10pub trait DebugQueryTable {
14 type Key;
16
17 type Value;
19
20 fn durability(&self, key: Self::Key) -> Durability;
25
26 fn entries<C>(&self) -> C
28 where
29 C: FromIterator<TableEntry<Self::Key, Self::Value>>;
30}
31
32#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
34#[non_exhaustive]
35pub struct TableEntry<K, V> {
36 pub key: K,
38 pub value: Option<V>,
40}
41
42impl<K, V> TableEntry<K, V> {
43 pub(crate) fn new(key: K, value: Option<V>) -> TableEntry<K, V> {
44 TableEntry { key, value }
45 }
46}
47
48impl<'d, Q> DebugQueryTable for QueryTable<'_, Q>
49where
50 Q: Query,
51 Q::Storage: QueryStorageOps<Q>,
52{
53 type Key = Q::Key;
54 type Value = Q::Value;
55
56 fn durability(&self, key: Q::Key) -> Durability {
57 self.storage.durability(self.db, &key)
58 }
59
60 fn entries<C>(&self) -> C
61 where
62 C: FromIterator<TableEntry<Self::Key, Self::Value>>,
63 {
64 self.storage.entries(self.db)
65 }
66}