sui_gql_client/queries/
object_arg.rs1use af_sui_types::{Address, ObjectArg, Version};
2use cynic::{QueryFragment, QueryVariables};
3
4use super::Error;
5use super::object_args::ObjectOwner;
6use crate::{GraphQlClient, GraphQlResponseExt as _, scalars, schema};
7
8pub(super) async fn query<C>(client: &C, object_id: Address) -> Result<ObjectArg, Error<C::Error>>
11where
12 C: GraphQlClient,
13{
14 let data = client
15 .query::<Query, _>(Variables { address: object_id })
16 .await
17 .map_err(Error::Client)?
18 .try_into_data()?;
19
20 graphql_extract::extract!(data => {
21 object? {
22 object_id
23 version
24 digest
25 owner?
26 }
27 });
28 let oarg = super::object_args::build_object_arg_default(object_id, version, owner, digest)
29 .ok_or(Error::MissingData("Digest for owned object".into()))?;
30 Ok(oarg)
31}
32
33#[derive(QueryVariables, Debug)]
34struct Variables {
35 address: Address,
36}
37
38#[derive(QueryFragment, Debug)]
39#[cynic(variables = "Variables")]
40struct Query {
41 #[arguments(address: $address)]
42 object: Option<GqlObject>,
43}
44
45#[derive(QueryFragment, Debug)]
46#[cynic(graphql_type = "Object")]
47struct GqlObject {
48 #[cynic(rename = "address")]
49 object_id: Address,
50 version: Version,
51 digest: Option<scalars::Digest>,
52 owner: Option<ObjectOwner>,
53}
54
55#[cfg(test)]
56#[test]
57fn gql_output() {
58 use cynic::QueryBuilder as _;
59
60 let vars = Variables {
61 address: Address::ZERO,
62 };
63 let operation = Query::build(vars);
64 insta::assert_snapshot!(operation.query, @r###"
65 query Query($address: SuiAddress!) {
66 object(address: $address) {
67 address
68 version
69 digest
70 owner {
71 __typename
72 ... on Immutable {
73 _
74 }
75 ... on Shared {
76 __typename
77 initialSharedVersion
78 }
79 ... on Parent {
80 __typename
81 }
82 ... on AddressOwner {
83 __typename
84 }
85 }
86 }
87 }
88 "###);
89}