reachable_node/
db.rs

1// SPDX-FileCopyrightText: 2024 eaon <eaon@posteo.net>
2// SPDX-License-Identifier: EUPL-1.2
3
4use redb::{MultimapTableDefinition, TableDefinition, TypeName, Value};
5
6use ecdh_omr::Blinded;
7use reach_aliases::{OneSix, SixFour};
8use reach_core::{
9    storage::db,
10    wire::{EnvelopeId, MessageVaultId},
11};
12
13#[derive(Debug)]
14pub struct BlindedPublicKey {}
15
16impl Value for BlindedPublicKey {
17    type SelfType<'a>
18        = reach_aliases::BlindedPublicKey
19    where
20        Self: 'a;
21
22    type AsBytes<'a>
23        = [u8; 64]
24    where
25        Self: 'a;
26
27    fn fixed_width() -> Option<usize> {
28        Some(64)
29    }
30
31    fn from_bytes<'a>(data: &'a [u8]) -> Self::SelfType<'a>
32    where
33        Self: 'a,
34    {
35        let intermediary = SixFour::try_from(data).expect("Size ought to be 64 bytes.");
36        Self::SelfType::<'a>::from_bytes(&intermediary).expect("Infallible")
37    }
38
39    fn as_bytes<'a, 'b: 'a>(value: &'a Self::SelfType<'b>) -> Self::AsBytes<'a>
40    where
41        Self: 'a,
42        Self: 'b,
43    {
44        value.to_bytes()
45    }
46
47    fn type_name() -> TypeName {
48        TypeName::new("BlindedPublicKey")
49    }
50}
51
52pub const REACHABLE_VERIFYING_KEYS: TableDefinition<'_, SixFour, db::ReachableVerifyingKeys> =
53    TableDefinition::new("reachable_verifying_keys");
54pub const REACHABLE_PUBLIC_KEYS: MultimapTableDefinition<
55    '_,
56    db::ReachableVerifyingKeys,
57    db::ReachablePublicKeys,
58> = MultimapTableDefinition::new("reachable_public_keys");
59pub const ENVELOPE_IDS: MultimapTableDefinition<'_, &str, EnvelopeId> =
60    MultimapTableDefinition::new("envelope_ids");
61pub const HINT_REMOVAL_TOKENS: MultimapTableDefinition<'_, EnvelopeId, OneSix> =
62    MultimapTableDefinition::new("hint_removal_tokens");
63pub const ENVELOPES: TableDefinition<'_, EnvelopeId, db::Envelope> =
64    TableDefinition::new("envelopes");
65pub const BLINDED_PUBLIC_KEYS: TableDefinition<'_, OneSix, BlindedPublicKey> =
66    TableDefinition::new("blinded_public_keys");
67pub const ENVELOPE_ID_MESSAGE_VAULT_ID: TableDefinition<'_, EnvelopeId, MessageVaultId> =
68    TableDefinition::new("envelope_id_message_vault_id");
69pub const MESSAGE_VAULTS: TableDefinition<'_, MessageVaultId, db::MessageVault> =
70    TableDefinition::new("message_vaults");