af_iperps/graphql/
registry.rs1use af_move_type::MoveInstance;
2use af_sui_types::{Address, TypeTag, Version};
3use futures::Stream;
4use sui_gql_client::GraphQlClient;
5use sui_gql_client::queries::GraphQlClientExt as _;
6use sui_gql_client::queries::outputs::DynamicField;
7
8use super::Result as QResult;
9
10pub(super) fn query<C>(
11 client: &C,
12 registry_address: Address,
13 version: Option<Version>,
14) -> impl Stream<Item = QResult<Address, C>> + '_
15where
16 C: GraphQlClient,
17{
18 async_stream::try_stream! {
19 let mut has_next_page = true;
20 let mut cursor = None;
21 while has_next_page {
22 let (dfs, cursor_) = client
23 .owner_df_contents(registry_address, version, None, cursor)
24 .await?;
25 cursor = cursor_;
26 has_next_page = cursor.is_some();
27
28 for (name, raw) in dfs {
29 let DynamicField::Field(_raw) = raw else {
30 continue;
31 };
32 let TypeTag::Struct(name_type) = name.type_ else {
33 continue;
34 };
35 if let Ok(key) =
36 MoveInstance::<crate::keys::RegistryMarketInfo>::from_raw_struct(*name_type, &name.bcs)
37 {
38 yield key.value.ch_id.bytes;
39 }
40 }
41 }
42 }
43}