casper_types/transaction/
transfer_target.rs

1#[cfg(any(feature = "testing", test))]
2use rand::Rng;
3
4#[cfg(any(feature = "testing", test))]
5use crate::testing::TestRng;
6use crate::{account::AccountHash, PublicKey, URef};
7
8/// The various types which can be used as the `target` runtime argument of a native transfer.
9#[derive(Clone, Ord, PartialOrd, Eq, PartialEq, Debug)]
10pub enum TransferTarget {
11    /// A public key.
12    PublicKey(PublicKey),
13    /// An account hash.
14    AccountHash(AccountHash),
15    /// A URef.
16    URef(URef),
17}
18
19impl TransferTarget {
20    /// Returns a random `TransferTarget`.
21    #[cfg(any(feature = "testing", test))]
22    pub fn random(rng: &mut TestRng) -> Self {
23        match rng.gen_range(0..3) {
24            0 => TransferTarget::PublicKey(PublicKey::random(rng)),
25            1 => TransferTarget::AccountHash(rng.gen()),
26            2 => TransferTarget::URef(rng.gen()),
27            _ => unreachable!(),
28        }
29    }
30}
31
32impl From<PublicKey> for TransferTarget {
33    fn from(public_key: PublicKey) -> Self {
34        Self::PublicKey(public_key)
35    }
36}
37
38impl From<AccountHash> for TransferTarget {
39    fn from(account_hash: AccountHash) -> Self {
40        Self::AccountHash(account_hash)
41    }
42}
43
44impl From<URef> for TransferTarget {
45    fn from(uref: URef) -> Self {
46        Self::URef(uref)
47    }
48}