sui_gql_client/queries/
owner_df_content.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
use af_sui_types::Address as SuiAddress;
use cynic::GraphQlResponse;

use super::fragments::MoveValueRaw;
use super::outputs::RawMoveValue;
use super::Error;
use crate::{missing_data, scalars, schema, GraphQlClient, GraphQlResponseExt};

pub async fn query<C: GraphQlClient>(
    client: &C,
    address: SuiAddress,
    RawMoveValue {
        type_: df_name_type,
        bcs: df_name_bcs,
    }: RawMoveValue,
    root_version: Option<u64>,
) -> Result<RawMoveValue, Error<C::Error>> {
    let vars = QueryVariables {
        address,
        root_version,
        name: DynamicFieldName {
            type_: scalars::TypeTag(df_name_type),
            bcs: scalars::Base64::new(df_name_bcs),
        },
    };
    let result: GraphQlResponse<Query> = client.query(vars).await.map_err(Error::Client)?;
    let data = result
        .try_into_data()?
        .ok_or(missing_data!("Response empty"))?;
    let df_value = data
        .owner
        .ok_or(missing_data!("Owner not found"))?
        .dynamic_field
        .ok_or(missing_data!("Dynamic field not found"))?
        .value
        .ok_or(missing_data!("No dynamic field value"))?;
    match df_value {
        DynamicFieldValue::MoveValue(value) => Ok(value.into()),
        DynamicFieldValue::Unknown => Err(missing_data!("Not a dynamic field type")),
    }
}

#[cfg(test)]
#[allow(clippy::unwrap_used)]
#[test]
fn gql_output() {
    use cynic::QueryBuilder as _;
    let vars = QueryVariables {
        address: SuiAddress::new(rand::random()),
        root_version: None,
        name: DynamicFieldName {
            type_: scalars::TypeTag("0x2::sui::SUI".parse().unwrap()),
            bcs: scalars::Base64::new(vec![]),
        },
    };
    let operation = Query::build(vars);
    insta::assert_snapshot!(operation.query);
}

// ================================================================================
//  Mostly autogenerated by: https://generator.cynic-rs.dev/
// ================================================================================

#[derive(cynic::QueryVariables, Debug)]
struct QueryVariables {
    address: SuiAddress,
    name: DynamicFieldName,
    root_version: Option<af_sui_types::Version>,
}

#[derive(cynic::InputObject, Debug)]
struct DynamicFieldName {
    #[cynic(rename = "type")]
    type_: scalars::TypeTag,
    bcs: scalars::Base64<Vec<u8>>,
}

#[derive(cynic::QueryFragment, Debug)]
#[cynic(variables = "QueryVariables")]
struct Query {
    #[arguments(address: $address, rootVersion: $root_version)]
    owner: Option<Owner>,
}

#[derive(cynic::QueryFragment, Debug)]
#[cynic(variables = "QueryVariables")]
struct Owner {
    #[arguments(name: $name)]
    dynamic_field: Option<_DynamicField>,
}

#[derive(cynic::QueryFragment, Debug)]
#[cynic(graphql_type = "DynamicField")]
struct _DynamicField {
    value: Option<DynamicFieldValue>,
}

#[derive(cynic::InlineFragments, Debug)]
enum DynamicFieldValue {
    MoveValue(MoveValueRaw),
    #[cynic(fallback)]
    Unknown,
}