1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
use candid::CandidType;
use serde::{Deserialize, Serialize};

use crate::{BlockHeight, CandidBlockHeight, CandidWalletRegisterId, PublicKey, WalletRegisterId};

#[derive(
    CandidType, Clone, Hash, Deserialize, Serialize, Debug, Eq, PartialEq, PartialOrd, Ord,
)]
pub struct WalletIdentifier(pub PublicKey);

impl WalletIdentifier {
    pub fn new(public_key: PublicKey) -> Self {
        Self(public_key)
    }
}

impl AsRef<PublicKey> for WalletIdentifier {
    fn as_ref(&self) -> &PublicKey {
        &self.0
    }
}

impl From<PublicKey> for WalletIdentifier {
    fn from(public_key: PublicKey) -> Self {
        Self(public_key)
    }
}

#[derive(Clone, Hash, Deserialize, Serialize, Debug, Eq, PartialEq, PartialOrd, Ord)]
pub struct RegisteredWalletIdentifier {
    pub wallet_id: WalletRegisterId,
    pub wallet_identifier: WalletIdentifier,
    pub registered_height: BlockHeight,
}

#[derive(CandidType, Clone, Hash, Deserialize, Debug, Eq, PartialEq, PartialOrd, Ord)]
pub struct CandidRegisteredWalletIdentifier {
    pub wallet_id: CandidWalletRegisterId,
    pub wallet_identifier: WalletIdentifier,
    pub registered_height: CandidBlockHeight,
}

impl From<RegisteredWalletIdentifier> for CandidRegisteredWalletIdentifier {
    fn from(registered_wallet_identifier: RegisteredWalletIdentifier) -> Self {
        Self {
            wallet_id: registered_wallet_identifier.wallet_id.into(),
            wallet_identifier: registered_wallet_identifier.wallet_identifier,
            registered_height: registered_wallet_identifier.registered_height.into(),
        }
    }
}

impl From<CandidRegisteredWalletIdentifier> for RegisteredWalletIdentifier {
    fn from(candid_registered_wallet_identifier: CandidRegisteredWalletIdentifier) -> Self {
        Self {
            wallet_id: candid_registered_wallet_identifier.wallet_id.into(),
            wallet_identifier: candid_registered_wallet_identifier.wallet_identifier,
            registered_height: candid_registered_wallet_identifier.registered_height.into(),
        }
    }
}