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