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