iota_package_dump/
query.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2024 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5use cynic::{Operation, QueryBuilder};
6
7#[cynic::schema("iota")]
8mod schema {}
9
10#[derive(cynic::Scalar, Debug)]
11pub(crate) struct IotaAddress(pub String);
12
13#[derive(cynic::Scalar, Debug)]
14pub(crate) struct Base64(pub String);
15
16#[derive(cynic::Scalar, Debug)]
17pub(crate) struct UInt53(pub u64);
18
19/// Query types related to GraphQL service limits.
20pub(crate) mod limits {
21    use super::*;
22
23    pub(crate) fn build() -> Operation<Query> {
24        Query::build(())
25    }
26
27    #[derive(cynic::QueryFragment, Debug)]
28    pub(crate) struct Query {
29        pub(crate) service_config: ServiceConfig,
30    }
31
32    #[derive(cynic::QueryFragment, Debug)]
33    pub(crate) struct ServiceConfig {
34        pub(crate) max_page_size: i32,
35    }
36}
37
38/// Query types related to fetching packages.
39pub(crate) mod packages {
40    use super::*;
41
42    pub(crate) fn build(
43        first: i32,
44        after: Option<String>,
45        after_checkpoint: Option<UInt53>,
46        before_checkpoint: Option<UInt53>,
47    ) -> Operation<Query, Vars> {
48        Query::build(Vars {
49            first,
50            after,
51            filter: Some(MovePackageCheckpointFilter {
52                after_checkpoint,
53                before_checkpoint,
54            }),
55        })
56    }
57
58    #[derive(cynic::QueryVariables, Debug)]
59    pub(crate) struct Vars {
60        pub(crate) first: i32,
61        pub(crate) after: Option<String>,
62        pub(crate) filter: Option<MovePackageCheckpointFilter>,
63    }
64
65    #[derive(cynic::InputObject, Debug)]
66    pub(crate) struct MovePackageCheckpointFilter {
67        pub(crate) after_checkpoint: Option<UInt53>,
68        pub(crate) before_checkpoint: Option<UInt53>,
69    }
70
71    #[derive(cynic::QueryFragment, Debug)]
72    #[cynic(variables = "Vars")]
73    pub(crate) struct Query {
74        pub(crate) checkpoint: Option<Checkpoint>,
75        #[arguments(
76            first: $first,
77            after: $after,
78            filter: $filter,
79        )]
80        pub(crate) packages: MovePackageConnection,
81    }
82
83    #[derive(cynic::QueryFragment, Debug)]
84    pub(crate) struct Checkpoint {
85        pub(crate) sequence_number: UInt53,
86    }
87
88    #[derive(cynic::QueryFragment, Debug)]
89    pub(crate) struct MovePackageConnection {
90        pub(crate) page_info: PageInfo,
91        pub(crate) nodes: Vec<MovePackage>,
92    }
93
94    #[derive(cynic::QueryFragment, Debug)]
95    pub(crate) struct PageInfo {
96        pub(crate) has_next_page: bool,
97        pub(crate) end_cursor: Option<String>,
98    }
99
100    #[derive(cynic::QueryFragment, Debug)]
101    pub(crate) struct MovePackage {
102        pub(crate) address: IotaAddress,
103        pub(crate) bcs: Option<Base64>,
104    }
105}