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