tensor_vipers/
keyref.rs

1//! Allows getting the reference of the key of an account or [Pubkey].
2
3use anchor_lang::{prelude::*, ZeroCopy};
4
5/// Defines the Pubkey of an account, fetching it as a reference.
6pub trait AsKeyRef {
7    /// Returns the [Pubkey] of the account or key as a reference.
8    fn as_key_ref(&self) -> &Pubkey;
9}
10
11impl AsKeyRef for Pubkey {
12    fn as_key_ref(&self) -> &Pubkey {
13        self
14    }
15}
16
17impl<'info, T: AccountSerialize + AccountDeserialize + Owner + Clone> AsKeyRef
18    for Box<Account<'info, T>>
19{
20    fn as_key_ref(&self) -> &Pubkey {
21        self.as_ref().as_key_ref()
22    }
23}
24
25impl<'info, T: AccountSerialize + AccountDeserialize + Owner + Clone> AsKeyRef
26    for Account<'info, T>
27{
28    fn as_key_ref(&self) -> &Pubkey {
29        let my_ref: &AccountInfo<'info> = self.as_ref();
30        my_ref.key
31    }
32}
33
34impl<'info> AsKeyRef for AccountInfo<'info> {
35    fn as_key_ref(&self) -> &Pubkey {
36        self.key
37    }
38}
39
40impl<'info, T: ZeroCopy + Owner> AsKeyRef for AccountLoader<'info, T> {
41    fn as_key_ref(&self) -> &Pubkey {
42        self.as_ref().key
43    }
44}
45
46impl<'info> AsKeyRef for Signer<'info> {
47    fn as_key_ref(&self) -> &Pubkey {
48        self.as_ref().key
49    }
50}
51
52impl<'info> AsKeyRef for SystemAccount<'info> {
53    fn as_key_ref(&self) -> &Pubkey {
54        self.as_ref().key
55    }
56}
57
58impl<'info, T: anchor_lang::solana_program::sysvar::Sysvar> AsKeyRef for Sysvar<'info, T> {
59    fn as_key_ref(&self) -> &Pubkey {
60        self.as_ref().key
61    }
62}
63
64impl<'info> AsKeyRef for UncheckedAccount<'info> {
65    fn as_key_ref(&self) -> &Pubkey {
66        self.as_ref().key
67    }
68}