1use anchor_lang::{prelude::*, ZeroCopy};
4
5pub trait AsKeyRef {
7 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}