midgard_rs/midgard/endpoints/
pools.rs1use anyhow::Result;
2use chrono::Utc;
3
4use crate::{api_get_details_of_pool, api_get_pool_list, api_get_known_pool_list, api_get_statistics_of_pool, Midgard, KnownPoolList, Pool, PoolList, PoolStatus, PoolStatistics, TimePeriod};
5
6impl Midgard {
7 pub async fn get_pool_list(&mut self, status: Option<PoolStatus>, period: Option<TimePeriod>) -> Result<PoolList> {
24 self.sleep_until_ok_to_call().await;
26
27 self.set_last_call(Utc::now());
28 api_get_pool_list(self.get_config().get_base_url(), status, period).await
29 }
30
31 pub async fn get_details_of_pool(&mut self, pool: &str, period: Option<TimePeriod>) -> Result<Pool> {
55 self.sleep_until_ok_to_call().await;
57
58 self.set_last_call(Utc::now());
59 api_get_details_of_pool(self.get_config().get_base_url(), pool, period).await
60 }
61
62 pub async fn get_known_pool_list(&mut self) -> Result<KnownPoolList> {
78 self.sleep_until_ok_to_call().await;
80
81 self.set_last_call(Utc::now());
82 api_get_known_pool_list(self.get_config().get_base_url()).await
83 }
84
85 pub async fn get_statistics_of_pool(&mut self, pool: &str, period: Option<TimePeriod>) -> Result<PoolStatistics> {
109 self.sleep_until_ok_to_call().await;
111
112 self.set_last_call(Utc::now());
113 api_get_statistics_of_pool(self.get_config().get_base_url(), pool, period).await
114 }
115
116}
117
118#[cfg(test)]
119mod tests {
120 use rand::prelude::*;
121 use serde_json::json;
122
123 use super::*;
124
125 #[tokio::test]
126 async fn test_get_pool_list() {
127 let mut midgard = Midgard::new();
128
129 let pool_list = midgard.get_pool_list(None, None).await.unwrap();
130 println!("{}", json!(pool_list.get_pools()));
131 assert!(!pool_list.get_pools().is_empty());
132 }
133
134 #[tokio::test]
135 async fn test_get_simplified_assets() {
136 let mut midgard = Midgard::new();
137
138 let pool_list = midgard.get_pool_list(None, None).await.unwrap();
139 println!("{}", json!(pool_list.get_simplified_assets()));
140 assert!(!pool_list.get_simplified_assets().is_empty());
141 }
142
143 #[tokio::test]
144 async fn test_get_pool_list_with_status() {
145 let mut midgard = Midgard::new();
146
147 let status = Some(PoolStatus::Available);
148 let period = None;
149
150 let pool_list = midgard.get_pool_list(status, period).await.unwrap();
151 println!("{}", json!(pool_list.get_pools()));
152 assert!(!pool_list.get_pools().is_empty());
153 }
154
155 #[tokio::test]
156 async fn test_get_pool_list_with_period() {
157 let mut midgard = Midgard::new();
158
159 let status = None;
160 let period = Some(TimePeriod::SevenDays);
161
162 let pool_list = midgard.get_pool_list(status, period).await.unwrap();
163 println!("{}", json!(pool_list.get_pools()));
164 assert!(!pool_list.get_pools().is_empty());
165 }
166
167 #[tokio::test]
168 async fn test_get_pool_list_with_status_and_period() {
169 let mut midgard = Midgard::new();
170
171 let status = Some(PoolStatus::Available);
172 let period = Some(TimePeriod::FourteenDays);
173
174 let pool_list = midgard.get_pool_list(status, period).await.unwrap();
175 println!("{}", json!(pool_list.get_pools()));
176 assert!(!pool_list.get_pools().is_empty());
177 }
178
179 #[tokio::test]
180 async fn test_get_details_of_pool() {
181 let mut midgard = Midgard::new();
182
183 let pool_list = midgard.get_pool_list(None, None).await.unwrap();
184 let random_usize = thread_rng().gen_range(0..pool_list.get_pools().len());
185 let pool = pool_list.get_pools()[random_usize].clone();
186 let pool = pool.get_asset().to_string();
187 println!("pool: {}", &pool);
188
189 let details = midgard.get_details_of_pool(&pool, None).await.unwrap();
190 println!("{}", json!(details));
191 assert!(!details.get_annual_percentage_rate().is_zero());
192 }
193
194 #[tokio::test]
195 async fn test_get_known_pool_list() {
196 let mut midgard = Midgard::new();
197
198 let known_pool_list = midgard.get_known_pool_list().await.unwrap();
199 println!("{}", json!(known_pool_list));
200 assert!(!known_pool_list.into_iter().collect::<Vec<(String, PoolStatus)>>().is_empty());
201 }
202
203 #[tokio::test]
204 async fn test_get_statistics_of_pool() {
205 let mut midgard = Midgard::new();
206
207 let pool_list = midgard.get_pool_list(None, None).await.unwrap();
209 let random_usize = thread_rng().gen_range(0..pool_list.get_pools().len());
210 let pool = pool_list.get_pools()[random_usize].clone();
211 let pool = pool.get_asset().to_string();
212 println!("pool: {}", &pool);
213
214 let pool_statistics = midgard.get_statistics_of_pool(&pool, None).await.unwrap();
216 println!("{}", json!(pool_statistics));
217 assert!(!pool_statistics.get_asset().is_empty());
218 }
219}