defituna_client/gpa/
lending_position.rs1use std::error::Error;
2
3pub const LENDING_POSITION_DISCRIMINATOR: &[u8] = &[47, 255, 252, 35, 20, 245, 157, 243];
4
5use solana_client::{
6 rpc_client::RpcClient,
7 rpc_filter::{Memcmp, RpcFilterType},
8};
9use solana_program::pubkey::Pubkey;
10
11use crate::accounts::LendingPosition;
12use crate::generated::shared::DecodedAccount;
13use crate::gpa::utils::fetch_decoded_program_accounts;
14
15#[derive(Debug, Clone)]
16pub enum LendingPositionFilter {
17 Authority(Pubkey),
18 Mint(Pubkey),
19}
20
21impl From<LendingPositionFilter> for RpcFilterType {
22 fn from(val: LendingPositionFilter) -> Self {
23 match val {
24 LendingPositionFilter::Authority(address) => RpcFilterType::Memcmp(Memcmp::new_base58_encoded(11, &address.to_bytes())),
25 LendingPositionFilter::Mint(address) => RpcFilterType::Memcmp(Memcmp::new_base58_encoded(43, &address.to_bytes())),
26 }
27 }
28}
29
30pub fn fetch_all_lending_position_with_filter(rpc: &RpcClient, filters: Vec<LendingPositionFilter>) -> Result<Vec<DecodedAccount<LendingPosition>>, Box<dyn Error>> {
31 let mut filters: Vec<RpcFilterType> = filters.into_iter().map(|filter| filter.into()).collect();
32 filters.push(RpcFilterType::Memcmp(Memcmp::new_base58_encoded(0, LENDING_POSITION_DISCRIMINATOR)));
33 fetch_decoded_program_accounts(rpc, filters)
34}