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