sui_gql_client/queries/
package_at_version.rs1use af_sui_types::{Address, Version};
2
3use super::Error;
4use crate::{GraphQlClient, GraphQlResponseExt as _, schema};
5
6pub(super) async fn query<C: GraphQlClient>(
7 client: &C,
8 package_id: Address,
9 version: Version,
10) -> super::Result<Address, C> {
11 let vars = Variables {
12 address: package_id,
13 version: Some(version),
14 };
15 let data = client
16 .query::<Query, _>(vars)
17 .await
18 .map_err(Error::Client)?
19 .try_into_data()?;
20 graphql_extract::extract!(data => {
21 package? {
22 address
23 }
24 });
25 Ok(address)
26}
27
28#[derive(cynic::QueryVariables, Clone, Debug)]
29struct Variables {
30 address: Address,
31 version: Option<Version>,
32}
33
34#[derive(cynic::QueryFragment, Debug)]
35#[cynic(variables = "Variables")]
36struct Query {
37 #[arguments(address: $address, version: $version)]
38 package: Option<MovePackage>,
39}
40
41#[derive(cynic::QueryFragment, Debug)]
42struct MovePackage {
43 address: Address,
44}
45
46#[cfg(test)]
47#[allow(clippy::unwrap_used)]
48#[test]
49fn gql_output() {
50 use cynic::QueryBuilder as _;
51
52 let vars = Variables {
53 address: Address::ZERO,
54 version: None,
55 };
56 let operation = Query::build(vars);
57 insta::assert_snapshot!(operation.query, @r###"
58 query Query($address: SuiAddress!, $version: UInt53) {
59 package(address: $address, version: $version) {
60 address
61 }
62 }
63 "###);
64}