midgard_rs/types/
pool_statistics.rs

1use rust_decimal::Decimal;
2use serde::{Deserialize, Serialize};
3use serde_aux::prelude::*;
4
5use crate::PoolStatus;
6
7/*
8
9*** Pool Statistics Scheme ***
10
11{
12		"addAssetLiquidityVolume": "21559093216525",
13		"addLiquidityCount": "204",
14		"addLiquidityVolume": "35549551832000",
15		"addRuneLiquidityVolume": "13990458615475",
16		"annualPercentageRate": "",
17		"asset": "BTC.BTC",
18		"assetDepth": "130912432302",
19		"assetPrice": "8032.090469519714",
20		"assetPriceUSD": "68607.11551099402",
21		"averageSlip": "0.680060937697664",
22		"earnings": "15616236427576",
23		"earningsAnnualAsPercentOfDepth": "0.18069182395260117",
24		"liquidityUnits": "389213036474226",
25		"poolAPY": "",
26		"runeDepth": "1051500499834539",
27		"saversAPR": "",
28		"status": PoolStatus,
29		"swapCount": "371527",
30		"swapVolume": "33935042500592046",
31		"synthSupply": "99800573524",
32		"synthUnits": "239739881003189",
33		"toAssetAverageSlip": "1.193480577072595",
34		"toAssetCount": "34727",
35		"toAssetFees": "4281185337731",
36		"toAssetVolume": "5129969138619083",
37		"toRuneAverageSlip": "0.5035594614898463",
38		"toRuneCount": "83861",
39		"toRuneFees": "1182791124280",
40		"toRuneVolume": "5129599530261148",
41		"totalFees": "12165405926607",
42		"uniqueMemberCount": "3644",
43		"uniqueSwapperCount": "0",
44		"units": "628952917477415",
45		"withdrawAssetVolume": "55473673757483",
46		"withdrawCount": "321",
47		"withdrawRuneVolume": "40934592243966",
48		"withdrawVolume": "96408266001449"
49}
50
51*/
52
53#[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}