diff --git a/common/client-libs/validator-client/src/nyxd/contract_traits/mixnet_query_client.rs b/common/client-libs/validator-client/src/nyxd/contract_traits/mixnet_query_client.rs index f4128f0024..5b9e684fb1 100644 --- a/common/client-libs/validator-client/src/nyxd/contract_traits/mixnet_query_client.rs +++ b/common/client-libs/validator-client/src/nyxd/contract_traits/mixnet_query_client.rs @@ -1,7 +1,7 @@ // Copyright 2022-2023 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::define_paged_response; +use crate::collect_paged; use crate::nyxd::contract_traits::NymContractsProvider; use crate::nyxd::error::NyxdError; use crate::nyxd::CosmWasmClient; @@ -454,33 +454,10 @@ pub trait MixnetQueryClient { // extension trait to the query client to deal with the paged queries // (it didn't feel appropriate to combine it with the existing trait #[async_trait] -pub trait PagedMixnetClient: MixnetQueryClient + Send + Sync { - // async fn get_all_node_families(&self) -> Result, NyxdError> { - // let mut res = Vec::new(); - // let mut start_after = None; - // - // loop { - // let paged_response = self - // .get_all_node_families_paged(start_after.take(), None) - // .await?; - // res.extend(paged_response.families); - // - // if let Some(start_next_after) = paged_response.start_next_after { - // start_after = Some(start_next_after) - // } else { - // break; - // } - // } - // - // Ok(res) - // } - - // define_paged_response!( - // get_all_node_families, - // Family, - // get_all_node_families_paged, - // families - // ); +pub trait PagedMixnetClient: MixnetQueryClient { + async fn get_all_node_families(&self) -> Result, NyxdError> { + collect_paged!(self, get_all_node_families_paged, families) + } } #[async_trait] diff --git a/common/client-libs/validator-client/src/nyxd/contract_traits/mod.rs b/common/client-libs/validator-client/src/nyxd/contract_traits/mod.rs index cf75c407af..80dfb1b505 100644 --- a/common/client-libs/validator-client/src/nyxd/contract_traits/mod.rs +++ b/common/client-libs/validator-client/src/nyxd/contract_traits/mod.rs @@ -126,26 +126,21 @@ impl TryFrom for TypedNymContracts { } } -// a simple helper macro to define a function to repeatedly call a paged query until a full response is constructed +// a simple helper macro to define to repeatedly call a paged query until a full response is constructed #[macro_export] -macro_rules! define_paged_response { - ( $f: ident, $r: ty, $fc: ident, $field: ident ) => { - async fn $f(&self) -> Result, NyxdError> { - let mut res = Vec::new(); - let mut start_after = None; +macro_rules! collect_paged { + ( $self:ident, $f: ident, $field: ident ) => {{ + let mut res = Vec::new(); + let mut start_after = None; + loop { + let paged_response = $self.$f(start_after.take(), None).await?; + res.extend(paged_response.$field); - loop { - let paged_response = self.$fc(start_after.take(), None).await?; - res.extend(paged_response.$field); - - if let Some(start_next_after) = paged_response.start_next_after { - start_after = Some(start_next_after) - } else { - break; - } + if let Some(start_next_after) = paged_response.start_next_after { + start_after = Some(start_next_after) + } else { + break Ok(res); } - - Ok(res) } - }; + }}; }