devol_accounts_kit/account_readers/
read_root_account.rs

1use std::error::Error;
2use async_trait::async_trait;
3use solana_program::pubkey::Pubkey;
4use crate::dvl_client::dvl_client::DvlClient;
5use crate::account_readers::dvl_readable::{DvlReadable};
6use crate::accounts::devol_regular_account::DevolRegularAccount;
7use crate::accounts::root::root_account::RootAccount;
8
9#[async_trait]
10impl DvlReadable for RootAccount {
11    type DvlReadParams<'a> = ();
12
13    async fn get_public_key<'a>(
14        dvl_client: &DvlClient,
15        _params: &Self::DvlReadParams<'a>
16    ) -> Result<Box<Pubkey>, Box<dyn Error>> where Self: Sized {
17        Ok(Box::from(dvl_client.root_pda.key))
18    }
19
20    async fn read<'a>(
21        dvl_client: &DvlClient,
22        params: &Self::DvlReadParams<'a>
23    ) -> Result<Box<Self>, Box<dyn Error>> where Self: Sized {
24        let public_key = &*Self::get_public_key(dvl_client, params).await?;
25        let mut rpc_data = dvl_client.rpc_client.get_account(public_key).await?;
26        let account = Self::from_account(
27            public_key,
28            &mut rpc_data,
29            &dvl_client.root_pda.key,
30            &dvl_client.program_id,
31        )?;
32        Ok(account)
33    }
34}
35
36#[cfg(test)]
37mod tests {
38    use std::str::FromStr;
39    use solana_program::pubkey::Pubkey;
40    use crate::accounts::root::root_account::RootAccount;
41    use crate::constants::test_constants::ROOT_ADDRESS;
42    use crate::tests::tests::setup_devol_client;
43    use std::error::Error;
44
45    #[tokio::test]
46    async fn test_read_root_account_auto() -> Result<(), Box<dyn Error>> {
47        let client = setup_devol_client();
48        let _root_account = client.get_account::<RootAccount>(()).await?;
49        Ok(())
50    }
51
52    #[tokio::test]
53    async fn test_read_root_account_by_public_key() -> Result<(), Box<dyn Error>> {
54        let public_key = Pubkey::from_str(ROOT_ADDRESS)?;
55        let client = setup_devol_client();
56        let _root_account = client.get_account_by_public_key::<RootAccount>(&public_key).await?;
57        Ok(())
58    }
59}