light_client/indexer/
options.rs1use photon_api::models::{FilterSelector, Memcmp};
2use solana_account_decoder_client_types::UiDataSliceConfig;
3use solana_pubkey::Pubkey;
4
5#[derive(Debug, Clone)]
6pub struct GetCompressedTokenAccountsByOwnerOrDelegateOptions {
7 pub mint: Option<Pubkey>,
8 pub cursor: Option<String>,
9 pub limit: Option<u16>,
10}
11
12impl GetCompressedTokenAccountsByOwnerOrDelegateOptions {
13 pub fn new(mint: Option<Pubkey>) -> Self {
14 Self {
15 mint,
16 cursor: None,
17 limit: None,
18 }
19 }
20}
21
22pub struct PaginatedOptions {
26 pub cursor: Option<String>,
27 pub limit: Option<u16>,
28}
29
30pub struct GetCompressedAccountsByOwnerConfig {
31 pub filters: Option<Vec<GetCompressedAccountsFilter>>,
32 pub data_slice: Option<UiDataSliceConfig>,
33 pub cursor: Option<String>,
34 pub limit: Option<u16>,
35}
36
37#[derive(Clone)]
38pub struct GetCompressedAccountsFilter {
39 pub bytes: Vec<u8>,
40 pub offset: u32,
41}
42
43#[allow(clippy::from_over_into)]
44impl Into<FilterSelector> for GetCompressedAccountsFilter {
45 fn into(self) -> FilterSelector {
46 FilterSelector {
47 memcmp: Some(Box::new(Memcmp {
48 offset: self.offset,
49 bytes: base64::encode(&self.bytes), })),
51 }
52 }
53}
54
55impl GetCompressedAccountsByOwnerConfig {
56 pub fn filters_to_photon(&self) -> Option<Vec<FilterSelector>> {
57 self.filters
58 .as_ref()
59 .map(|filters| filters.iter().map(|f| f.clone().into()).collect())
60 }
61}