1use 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");