sui_indexer_alt_reader/
governance.rs1use std::collections::HashMap;
5
6use async_graphql::dataloader::Loader;
7use mysten_common::ZipDebugEqIteratorExt;
8use sui_sdk_types::Address;
9
10use crate::error::Error;
11use crate::fullnode_client::FullnodeClient;
12
13#[derive(Debug, Clone, PartialEq, Eq, Hash)]
14pub struct RewardsKey(pub Address);
15
16#[derive(Debug, Clone, PartialEq, Eq, Hash)]
17pub struct ValidatorAddressKey(pub Address);
18
19#[async_trait::async_trait]
20impl Loader<RewardsKey> for FullnodeClient {
21 type Value = u64;
22 type Error = Error;
23
24 async fn load(&self, keys: &[RewardsKey]) -> Result<HashMap<RewardsKey, u64>, Self::Error> {
25 let ids: Vec<Address> = keys.iter().map(|k| k.0).collect();
26 let results = self.calculate_rewards(&ids).await?;
27 Ok(keys
28 .iter()
29 .zip_debug_eq(results)
30 .map(|(k, reward)| (k.clone(), reward))
31 .collect())
32 }
33}
34
35#[async_trait::async_trait]
36impl Loader<ValidatorAddressKey> for FullnodeClient {
37 type Value = Address;
38 type Error = Error;
39
40 async fn load(
41 &self,
42 keys: &[ValidatorAddressKey],
43 ) -> Result<HashMap<ValidatorAddressKey, Address>, Self::Error> {
44 let ids: Vec<Address> = keys.iter().map(|k| k.0).collect();
45 let results = self.get_validator_address_by_pool_id(&ids).await?;
46 Ok(keys
47 .iter()
48 .zip_debug_eq(results)
49 .map(|(k, addr)| (k.clone(), addr))
50 .collect())
51 }
52}