fuel_gql_client/client/schema/
coin.rs1use crate::client::{
2 schema::{
3 schema,
4 Address,
5 AssetId,
6 PageInfo,
7 UtxoId,
8 U64,
9 },
10 PageDirection,
11 PaginatedResult,
12 PaginationRequest,
13};
14
15#[derive(cynic::QueryVariables, Debug)]
16pub struct CoinByIdArgs {
17 pub utxo_id: UtxoId,
18}
19
20#[derive(cynic::QueryFragment, Debug)]
21#[cynic(
22 schema_path = "./assets/schema.sdl",
23 graphql_type = "Query",
24 variables = "CoinByIdArgs"
25)]
26pub struct CoinByIdQuery {
27 #[arguments(utxoId: $utxo_id)]
28 pub coin: Option<Coin>,
29}
30
31#[derive(cynic::InputObject, Clone, Debug)]
32#[cynic(schema_path = "./assets/schema.sdl")]
33pub struct CoinFilterInput {
34 pub owner: Address,
36 pub asset_id: Option<AssetId>,
38}
39
40#[derive(cynic::QueryVariables, Debug)]
41pub struct CoinsConnectionArgs {
42 filter: CoinFilterInput,
44 pub after: Option<String>,
46 pub before: Option<String>,
48 pub first: Option<i32>,
50 pub last: Option<i32>,
53}
54
55impl From<(Address, AssetId, PaginationRequest<String>)> for CoinsConnectionArgs {
56 fn from(r: (Address, AssetId, PaginationRequest<String>)) -> Self {
57 match r.2.direction {
58 PageDirection::Forward => CoinsConnectionArgs {
59 filter: CoinFilterInput {
60 owner: r.0,
61 asset_id: Some(r.1),
62 },
63 after: r.2.cursor,
64 before: None,
65 first: Some(r.2.results as i32),
66 last: None,
67 },
68 PageDirection::Backward => CoinsConnectionArgs {
69 filter: CoinFilterInput {
70 owner: r.0,
71 asset_id: Some(r.1),
72 },
73 after: None,
74 before: r.2.cursor,
75 first: None,
76 last: Some(r.2.results as i32),
77 },
78 }
79 }
80}
81
82#[derive(cynic::QueryFragment, Debug)]
83#[cynic(
84 schema_path = "./assets/schema.sdl",
85 graphql_type = "Query",
86 variables = "CoinsConnectionArgs"
87)]
88pub struct CoinsQuery {
89 #[arguments(filter: $filter, after: $after, before: $before, first: $first, last: $last)]
90 pub coins: CoinConnection,
91}
92
93#[derive(cynic::QueryFragment, Debug)]
94#[cynic(schema_path = "./assets/schema.sdl")]
95pub struct CoinConnection {
96 pub edges: Vec<CoinEdge>,
97 pub page_info: PageInfo,
98}
99
100impl From<CoinConnection> for PaginatedResult<Coin, String> {
101 fn from(conn: CoinConnection) -> Self {
102 PaginatedResult {
103 cursor: conn.page_info.end_cursor,
104 has_next_page: conn.page_info.has_next_page,
105 has_previous_page: conn.page_info.has_previous_page,
106 results: conn.edges.into_iter().map(|e| e.node).collect(),
107 }
108 }
109}
110
111#[derive(cynic::QueryFragment, Debug)]
112#[cynic(schema_path = "./assets/schema.sdl")]
113pub struct CoinEdge {
114 pub cursor: String,
115 pub node: Coin,
116}
117
118#[derive(cynic::QueryFragment, Debug)]
119#[cynic(schema_path = "./assets/schema.sdl")]
120pub struct Coin {
121 pub amount: U64,
122 pub block_created: U64,
123 pub asset_id: AssetId,
124 pub utxo_id: UtxoId,
125 pub maturity: U64,
126 pub owner: Address,
127 pub status: CoinStatus,
128}
129
130#[derive(cynic::Enum, Clone, Copy, Debug, Eq, PartialEq)]
131#[cynic(schema_path = "./assets/schema.sdl")]
132pub enum CoinStatus {
133 Unspent,
134 Spent,
135}
136
137#[derive(cynic::QueryFragment, Debug)]
138#[cynic(schema_path = "./assets/schema.sdl", graphql_type = "Coin")]
139pub struct CoinIdFragment {
140 pub utxo_id: UtxoId,
141}
142
143#[cfg(test)]
144mod tests {
145 use super::*;
146
147 #[test]
148 fn coin_by_id_query_gql_output() {
149 use cynic::QueryBuilder;
150 let operation = CoinByIdQuery::build(CoinByIdArgs {
151 utxo_id: UtxoId::default(),
152 });
153 insta::assert_snapshot!(operation.query)
154 }
155
156 #[test]
157 fn coins_connection_query_gql_output() {
158 use cynic::QueryBuilder;
159 let operation = CoinsQuery::build(CoinsConnectionArgs {
160 filter: CoinFilterInput {
161 owner: Address::default(),
162 asset_id: Some(AssetId::default()),
163 },
164 after: None,
165 before: None,
166 first: None,
167 last: None,
168 });
169 insta::assert_snapshot!(operation.query)
170 }
171}