fuel_gql_client/client/schema/
contract.rs1use crate::client::{
2 schema::{
3 schema,
4 AssetId,
5 ContractId,
6 HexString,
7 PageInfo,
8 Salt,
9 U64,
10 },
11 PageDirection,
12 PaginatedResult,
13 PaginationRequest,
14};
15
16#[derive(cynic::QueryVariables, Debug)]
17pub struct ContractByIdArgs {
18 pub id: ContractId,
19}
20
21#[derive(cynic::QueryFragment, Debug)]
22#[cynic(
23 schema_path = "./assets/schema.sdl",
24 graphql_type = "Query",
25 variables = "ContractByIdArgs"
26)]
27pub struct ContractByIdQuery {
28 #[arguments(id: $id)]
29 pub contract: Option<Contract>,
30}
31
32#[derive(cynic::QueryFragment, Debug)]
33#[cynic(schema_path = "./assets/schema.sdl")]
34pub struct ContractBalance {
35 pub contract: ContractId,
36 pub amount: U64,
37 pub asset_id: AssetId,
38}
39
40#[derive(cynic::QueryVariables, Debug)]
41pub struct ContractBalanceQueryArgs {
42 pub id: ContractId,
43 pub asset: AssetId,
44}
45
46#[derive(cynic::QueryFragment, Debug)]
47#[cynic(
48 schema_path = "./assets/schema.sdl",
49 graphql_type = "Query",
50 variables = "ContractBalanceQueryArgs"
51)]
52pub struct ContractBalanceQuery {
53 #[arguments(contract: $id, asset: $asset)]
54 pub contract_balance: ContractBalance,
55}
56
57#[derive(cynic::QueryFragment, Debug)]
58#[cynic(schema_path = "./assets/schema.sdl")]
59pub struct Contract {
60 pub id: ContractId,
61 pub bytecode: HexString,
62 pub salt: Salt,
63}
64
65#[derive(cynic::QueryFragment, Debug)]
66#[cynic(schema_path = "./assets/schema.sdl", graphql_type = "Contract")]
67pub struct ContractIdFragment {
68 pub id: ContractId,
69}
70
71#[derive(cynic::InputObject, Clone, Debug)]
72#[cynic(schema_path = "./assets/schema.sdl")]
73pub struct ContractBalanceFilterInput {
74 pub contract: ContractId,
76}
77
78#[derive(cynic::QueryVariables, Debug)]
79pub struct ContractBalancesConnectionArgs {
80 filter: ContractBalanceFilterInput,
82 pub after: Option<String>,
84 pub before: Option<String>,
86 pub first: Option<i32>,
88 pub last: Option<i32>,
91}
92
93#[derive(cynic::QueryFragment, Debug)]
94#[cynic(schema_path = "./assets/schema.sdl")]
95pub struct ContractBalanceEdge {
96 pub cursor: String,
97 pub node: ContractBalance,
98}
99
100#[derive(cynic::QueryFragment, Debug)]
101#[cynic(schema_path = "./assets/schema.sdl")]
102pub struct ContractBalanceConnection {
103 pub edges: Vec<ContractBalanceEdge>,
104 pub page_info: PageInfo,
105}
106
107#[derive(cynic::QueryFragment, Debug)]
108#[cynic(
109 schema_path = "./assets/schema.sdl",
110 graphql_type = "Query",
111 variables = "ContractBalancesConnectionArgs"
112)]
113pub struct ContractBalancesQuery {
114 #[arguments(filter: $filter, after: $after, before: $before, first: $first, last: $last)]
115 pub contract_balances: ContractBalanceConnection,
116}
117
118impl From<ContractBalanceConnection> for PaginatedResult<ContractBalance, String> {
119 fn from(conn: ContractBalanceConnection) -> Self {
120 PaginatedResult {
121 has_next_page: conn.page_info.has_next_page,
122 has_previous_page: conn.page_info.has_previous_page,
123 cursor: conn.page_info.end_cursor,
124 results: conn.edges.into_iter().map(|e| e.node).collect(),
125 }
126 }
127}
128
129impl From<(ContractId, PaginationRequest<String>)> for ContractBalancesConnectionArgs {
130 fn from(r: (ContractId, PaginationRequest<String>)) -> Self {
131 match r.1.direction {
132 PageDirection::Forward => ContractBalancesConnectionArgs {
133 filter: ContractBalanceFilterInput { contract: r.0 },
134 after: r.1.cursor,
135 before: None,
136 first: Some(r.1.results as i32),
137 last: None,
138 },
139 PageDirection::Backward => ContractBalancesConnectionArgs {
140 filter: ContractBalanceFilterInput { contract: r.0 },
141 after: None,
142 before: r.1.cursor,
143 first: None,
144 last: Some(r.1.results as i32),
145 },
146 }
147 }
148}
149
150#[cfg(test)]
151mod tests {
152 use super::*;
153
154 #[test]
155 fn contract_by_id_query_gql_output() {
156 use cynic::QueryBuilder;
157 let operation = ContractByIdQuery::build(ContractByIdArgs {
158 id: ContractId::default(),
159 });
160 insta::assert_snapshot!(operation.query)
161 }
162}