sui_gql_client/queries/
coin_metadata.rs1use super::Error;
2use crate::{GraphQlClient, GraphQlResponseExt, schema};
3
4pub async fn query<C: GraphQlClient>(
5 client: &C,
6 type_: impl AsRef<str>,
7) -> Result<(Option<u8>, Option<String>, Option<String>), Error<C::Error>> {
8 let data = client
9 .query::<Query, _>(QueryVariables {
10 coin_type: type_.as_ref(),
11 })
12 .await
13 .map_err(Error::Client)?
14 .try_into_data()?;
15 graphql_extract::extract!(data => {
16 coin_metadata? {
17 decimals
18 name
19 symbol
20 }
21 });
22 Ok((decimals.map(|d| d as u8), name, symbol))
23}
24
25#[cfg(test)]
26#[allow(clippy::unwrap_used)]
27#[test]
28fn gql_output() {
29 use cynic::QueryBuilder as _;
30
31 let vars = QueryVariables {
32 coin_type: "0x2::sui::Sui",
33 };
34 let operation = Query::build(vars);
35 insta::assert_snapshot!(operation.query, @r###"
36 query Query($coinType: String!) {
37 coinMetadata(coinType: $coinType) {
38 decimals
39 name
40 symbol
41 }
42 }
43 "###);
44}
45
46#[derive(cynic::QueryVariables, Debug)]
47struct QueryVariables<'a> {
48 coin_type: &'a str,
49}
50
51#[derive(cynic::QueryFragment, Debug)]
52#[cynic(graphql_type = "Query", variables = "QueryVariables")]
53struct Query {
54 #[arguments(coinType: $coin_type)]
55 coin_metadata: Option<CoinMetadata>,
56}
57
58#[derive(cynic::QueryFragment, Debug)]
59struct CoinMetadata {
60 decimals: Option<i32>,
61 name: Option<String>,
62 symbol: Option<String>,
63}