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