1use rust_decimal::Decimal;
2use serde::{Deserialize, Serialize};
3use serde_aux::prelude::*;
4
5use crate::PoolStatus;
6
7#[derive(Debug, Serialize, Deserialize, Clone)]
54pub struct PoolStatistics {
55 #[serde(rename = "addAssetLiquidityVolume", deserialize_with = "deserialize_number_from_string")]
56 add_asset_liquidity_volume: u64,
57
58 #[serde(rename = "addLiquidityCount", deserialize_with = "deserialize_number_from_string")]
59 add_liquidity_count: u64,
60
61 #[serde(rename = "addLiquidityVolume", deserialize_with = "deserialize_number_from_string")]
62 add_liquidity_volume: u64,
63
64 #[serde(rename = "addRuneLiquidityVolume", deserialize_with = "deserialize_number_from_string")]
65 add_rune_liquidity_volume: u64,
66
67 #[serde(rename = "annualPercentageRate", with = "rust_decimal::serde::str_option")]
68 annual_percentage_rate: Option<Decimal>,
69
70 asset: String,
71
72 #[serde(rename = "assetDepth", deserialize_with = "deserialize_number_from_string")]
73 asset_depth: u64,
74
75 #[serde(rename = "assetPrice", with = "rust_decimal::serde::str_option")]
76 asset_price: Option<Decimal>,
77
78 #[serde(rename = "assetPriceUSD", with = "rust_decimal::serde::str_option")]
79 asset_price_usd: Option<Decimal>,
80
81 #[serde(rename = "averageSlip", with = "rust_decimal::serde::str_option")]
82 average_slip: Option<Decimal>,
83
84 #[serde(deserialize_with = "deserialize_number_from_string")]
85 earnings: u64,
86
87 #[serde(rename = "earningsAnnualAsPercentOfDepth", with = "rust_decimal::serde::str_option")]
88 earnings_annual_as_percent_of_depth: Option<Decimal>,
89
90 #[serde(rename = "liquidityUnits", deserialize_with = "deserialize_number_from_string")]
91 liquidity_units: u64,
92
93 #[serde(rename = "poolAPY", with = "rust_decimal::serde::str_option")]
94 pool_apy: Option<Decimal>,
95
96 #[serde(rename = "runeDepth", deserialize_with = "deserialize_number_from_string")]
97 rune_depth: u64,
98
99 #[serde(rename = "saversAPR", with = "rust_decimal::serde::str_option")]
100 savers_apr: Option<Decimal>,
101
102 status: PoolStatus,
103
104 #[serde(rename = "swapCount", deserialize_with = "deserialize_number_from_string")]
105 swap_count: u64,
106
107 #[serde(rename = "swapVolume", deserialize_with = "deserialize_number_from_string")]
108 swap_volume: u64,
109
110 #[serde(rename = "synthSupply", deserialize_with = "deserialize_number_from_string")]
111 synth_supply: u64,
112
113 #[serde(rename = "synthUnits", deserialize_with = "deserialize_number_from_string")]
114 synth_units: u64,
115
116 #[serde(rename = "toAssetAverageSlip", with = "rust_decimal::serde::str_option")]
117 to_asset_average_slip: Option<Decimal>,
118
119 #[serde(rename = "toAssetCount", deserialize_with = "deserialize_number_from_string")]
120 to_asset_count: u64,
121
122 #[serde(rename = "toAssetFees", deserialize_with = "deserialize_number_from_string")]
123 to_asset_fees: u64,
124
125 #[serde(rename = "toAssetVolume", deserialize_with = "deserialize_number_from_string")]
126 to_asset_volume: u64,
127
128 #[serde(rename = "toRuneAverageSlip", with = "rust_decimal::serde::str_option")]
129 to_rune_average_slip: Option<Decimal>,
130
131 #[serde(rename = "toRuneCount", deserialize_with = "deserialize_number_from_string")]
132 to_rune_count: u64,
133
134 #[serde(rename = "toRuneFees", deserialize_with = "deserialize_number_from_string")]
135 to_rune_fees: u64,
136
137 #[serde(rename = "toRuneVolume", deserialize_with = "deserialize_number_from_string")]
138 to_rune_volume: u64,
139
140 #[serde(rename = "totalFees", deserialize_with = "deserialize_number_from_string")]
141 total_fees: u64,
142
143 #[serde(rename = "uniqueMemberCount", deserialize_with = "deserialize_number_from_string")]
144 unique_member_count: u64,
145
146 #[serde(rename = "uniqueSwapperCount", deserialize_with = "deserialize_number_from_string")]
147 unique_swapper_count: u64,
148
149 #[serde(deserialize_with = "deserialize_number_from_string")]
150 units: u64,
151
152 #[serde(rename = "withdrawAssetVolume", deserialize_with = "deserialize_number_from_string")]
153 withdraw_asset_volume: u64,
154
155 #[serde(rename = "withdrawCount", deserialize_with = "deserialize_number_from_string")]
156 withdraw_count: u64,
157
158 #[serde(rename = "withdrawRuneVolume", deserialize_with = "deserialize_number_from_string")]
159 withdraw_rune_volume: u64,
160
161 #[serde(rename = "withdrawVolume", deserialize_with = "deserialize_number_from_string")]
162 withdraw_volume: u64,
163}
164
165impl PoolStatistics {
166 #[must_use]
167 pub const fn get_add_asset_liquidity_volume(&self) -> &u64 {
168 &self.add_asset_liquidity_volume
169 }
170
171 #[must_use]
172 pub const fn get_add_liquidity_count(&self) -> &u64 {
173 &self.add_liquidity_count
174 }
175
176 #[must_use]
177 pub const fn get_add_liquidity_volume(&self) -> &u64 {
178 &self.add_liquidity_volume
179 }
180
181 #[must_use]
182 pub const fn get_add_rune_liquidity_volume(&self) -> &u64 {
183 &self.add_rune_liquidity_volume
184 }
185
186 #[must_use]
187 pub const fn get_annual_percentage_rate(&self) -> &Option<Decimal> {
188 &self.annual_percentage_rate
189 }
190
191 #[must_use]
192 pub fn get_asset(&self) -> &str {
193 &self.asset
194 }
195
196 #[must_use]
197 pub const fn get_asset_depth(&self) -> &u64 {
198 &self.asset_depth
199 }
200
201 #[must_use]
202 pub const fn get_asset_price(&self) -> &Option<Decimal> {
203 &self.asset_price
204 }
205
206 #[must_use]
207 pub const fn get_asset_price_usd(&self) -> &Option<Decimal> {
208 &self.asset_price_usd
209 }
210
211 #[must_use]
212 pub const fn get_average_slip(&self) -> &Option<Decimal> {
213 &self.average_slip
214 }
215
216 #[must_use]
217 pub const fn get_earnings(&self) -> &u64 {
218 &self.earnings
219 }
220
221 #[must_use]
222 pub const fn get_earnings_annual_as_percent_of_depth(&self) -> &Option<Decimal> {
223 &self.earnings_annual_as_percent_of_depth
224 }
225
226 #[must_use]
227 pub const fn get_liquidity_units(&self) -> &u64 {
228 &self.liquidity_units
229 }
230
231 #[must_use]
232 pub const fn get_pool_apy(&self) -> &Option<Decimal> {
233 &self.pool_apy
234 }
235
236 #[must_use]
237 pub const fn get_rune_depth(&self) -> &u64 {
238 &self.rune_depth
239 }
240
241 #[must_use]
242 pub const fn get_savers_apr(&self) -> &Option<Decimal> {
243 &self.savers_apr
244 }
245
246 #[must_use]
247 pub const fn get_status(&self) -> &PoolStatus {
248 &self.status
249 }
250
251 #[must_use]
252 pub const fn get_swap_count(&self) -> &u64 {
253 &self.swap_count
254 }
255
256 #[must_use]
257 pub const fn get_swap_volume(&self) -> &u64 {
258 &self.swap_volume
259 }
260
261 #[must_use]
262
263 pub const fn get_synth_supply(&self) -> &u64 {
264 &self.synth_supply
265 }
266
267 #[must_use]
268 pub const fn get_synth_units(&self) -> &u64 {
269 &self.synth_units
270 }
271
272 #[must_use]
273 pub const fn get_to_asset_average_slip(&self) -> &Option<Decimal> {
274 &self.to_asset_average_slip
275 }
276
277 #[must_use]
278 pub const fn get_to_asset_count(&self) -> &u64 {
279 &self.to_asset_count
280 }
281
282 #[must_use]
283 pub const fn get_to_asset_fees(&self) -> &u64 {
284 &self.to_asset_fees
285 }
286
287 #[must_use]
288 pub const fn get_to_asset_volume(&self) -> &u64 {
289 &self.to_asset_volume
290 }
291
292 #[must_use]
293 pub const fn get_to_rune_average_slip(&self) -> &Option<Decimal> {
294 &self.to_rune_average_slip
295 }
296
297 #[must_use]
298 pub const fn get_to_rune_count(&self) -> &u64 {
299 &self.to_rune_count
300 }
301
302 #[must_use]
303 pub const fn get_to_rune_fees(&self) -> &u64 {
304 &self.to_rune_fees
305 }
306
307 #[must_use]
308 pub const fn get_to_rune_volume(&self) -> &u64 {
309 &self.to_rune_volume
310 }
311
312 #[must_use]
313 pub const fn get_total_fees(&self) -> &u64 {
314 &self.total_fees
315 }
316
317 #[must_use]
318 pub const fn get_unique_member_count(&self) -> &u64 {
319 &self.unique_member_count
320 }
321
322 #[must_use]
323 pub const fn get_unique_swapper_count(&self) -> &u64 {
324 &self.unique_swapper_count
325 }
326
327 #[must_use]
328 pub const fn get_units(&self) -> &u64 {
329 &self.units
330 }
331
332 #[must_use]
333 pub const fn get_withdraw_asset_volume(&self) -> &u64 {
334 &self.withdraw_asset_volume
335 }
336
337 #[must_use]
338 pub const fn get_withdraw_count(&self) -> &u64 {
339 &self.withdraw_count
340 }
341
342 #[must_use]
343 pub const fn get_withdraw_rune_volume(&self) -> &u64 {
344 &self.withdraw_rune_volume
345 }
346
347 #[must_use]
348 pub const fn get_withdraw_volume(&self) -> &u64 {
349 &self.withdraw_volume
350 }
351}
352
353#[cfg(test)]
354mod tests {
355 use serde_json::json;
356
357 use super::*;
358
359 #[test]
360 fn test_pool_statistics() {
361 let data = json!({
362 "addAssetLiquidityVolume": "24590890355026",
363 "addLiquidityCount": "360",
364 "addLiquidityVolume": "40221344358897",
365 "addRuneLiquidityVolume": "15630454003871",
366 "annualPercentageRate": "",
367 "asset": "BTC.BTC",
368 "assetDepth": "122158911333",
369 "assetPrice": "8111.36126510733",
370 "assetPriceUSD": "66087.27652984028",
371 "averageSlip": "0.7842017800749017",
372 "earnings": "13922336835230",
373 "earningsAnnualAsPercentOfDepth": "0.1709483244297171",
374 "liquidityUnits": "371333607382410",
375 "poolAPY": "",
376 "runeDepth": "990875061574177",
377 "saversAPR": "",
378 "status": "available",
379 "swapCount": "453127",
380 "swapVolume": "42931017080131394",
381 "synthSupply": "91549958430",
382 "synthUnits": "222530939275319",
383 "toAssetAverageSlip": "1.104416718060629",
384 "toAssetCount": "42158",
385 "toAssetFees": "2675601169560",
386 "toAssetVolume": "5359469309862998",
387 "toRuneAverageSlip": "0.5682455108466249",
388 "toRuneCount": "86709",
389 "toRuneFees": "1213533800335",
390 "toRuneVolume": "5382511018523059",
391 "totalFees": "11903589201397",
392 "uniqueMemberCount": "3605",
393 "uniqueSwapperCount": "0",
394 "units": "593864546657729",
395 "withdrawAssetVolume": "96548803913783",
396 "withdrawCount": "435",
397 "withdrawRuneVolume": "65049683457029",
398 "withdrawVolume": "161598487370812"
399 })
400 .to_string();
401
402 let pool_statistics: PoolStatistics = serde_json::from_str(&data).unwrap();
403
404 println!("pool_statistics: {}", json!(pool_statistics));
405
406 assert_eq!(pool_statistics.get_add_asset_liquidity_volume(), &24590890355026);
407 }
408}