start of the paged trait
This commit is contained in:
+5
-28
@@ -1,7 +1,7 @@
|
||||
// Copyright 2022-2023 - Nym Technologies SA <contact@nymtech.net>
|
||||
// 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<Vec<Family>, 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<Vec<Family>, NyxdError> {
|
||||
collect_paged!(self, get_all_node_families_paged, families)
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
|
||||
@@ -126,26 +126,21 @@ impl TryFrom<NymContracts> 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<Vec<$r>, 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)
|
||||
}
|
||||
};
|
||||
}};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user