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