devol_accounts_kit/account_readers/
dvl_readable.rs1use std::error::Error;
2use async_trait::async_trait;
3use solana_program::pubkey::Pubkey;
4use crate::dvl_client::dvl_client::DvlClient;
5use crate::accounts::client::client_account::client_account::ClientAccount;
6use crate::accounts::client::client_account::signer_account_params::SignerAccountParams;
7use crate::accounts::devol_account::DevolAccount;
8
9pub struct DvlIndexParam {
10 pub id: u32,
11}
12
13pub struct DvlClientParam<'a> {
14 pub client_account: &'a ClientAccount,
15}
16
17pub struct DvlClientParams<'a> {
18 pub client_address: &'a Pubkey,
19 pub signer_account_params: Option<&'a SignerAccountParams<'a>>,
20}
21
22#[async_trait]
23pub trait DvlReadable {
24 type DvlReadParams<'a>;
25
26 async fn get_public_key<'a>(
27 client: &DvlClient,
28 params: &Self::DvlReadParams<'a>
29 ) -> Result<Box<Pubkey>, Box<dyn Error>>
30 where
31 Self: Sized;
32
33 async fn read<'a>(
34 client: &DvlClient,
35 params: &Self::DvlReadParams<'a>
36 ) -> Result<Box<Self>, Box<dyn Error>>
37 where
38 Self: Sized;
39
40 async fn read_by_public_key(
41 client: &DvlClient,
42 public_key: &Pubkey,
43 ) -> Result<Box<Self>, Box<dyn Error>>
44 where
45 Self: Sized + DevolAccount + Copy
46 {
47 let mut rpc_data = client.rpc_client.get_account(public_key).await?;
48 let account = Self::from_account_basic(
49 public_key,
50 &mut rpc_data,
51 &client.root_pda.key,
52 &client.program_id,
53 )?;
54
55 Ok(account)
56 }
57}