1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
use anyhow::Result;
use chrono::Utc;
use crate::{api_get_borrowers_details, api_get_borrowers_list, BorrowersDetails, BorrowersList, Midgard};
impl Midgard {
/// Returns an array of statistics for all the open loans associated with a given borrower address.
///
/// # Example
///
/// ```rust
/// use midgard_rs::Midgard;
/// use rand::prelude::*;
///
/// # tokio_test::block_on(async {
/// // Create a new instance of Midgard
/// let mut midgard = Midgard::new();
///
/// // Get two random addresses from the list of borrowers
/// let borrowers = midgard.get_borrowers_list(None).await.unwrap();
/// let address_1 = borrowers.get_borrowers().choose(&mut rand::thread_rng()).unwrap().clone();
/// let address_2 = borrowers.get_borrowers().choose(&mut rand::thread_rng()).unwrap().clone();
/// let address = vec![address_1, address_2].join(",");
///
/// // Get the borrowers details
/// let borrowers_details = midgard.get_borrowers_details(&address).await.unwrap();
///
/// assert!(!borrowers_details.get_pools().is_empty());
/// # });
/// ```
///
/// # Errors
/// todo
pub async fn get_borrowers_details(&mut self, address: &str) -> Result<BorrowersDetails> {
// Wait for rate limit timer
self.sleep_until_ok_to_call().await;
self.set_last_call(Utc::now());
api_get_borrowers_details(self.get_config().get_base_url(), address).await
}
/// Returns an array containing the addresses for all borrowers. Addresses are only shown once.
///
/// # Example
///
/// ```rust
/// use midgard_rs::Midgard;
///
/// # tokio_test::block_on(async {
/// // Create a new instance of Midgard
/// let mut midgard = Midgard::new();
///
/// // Set the asset
/// let asset = Some("BTC.BTC".to_string());
///
/// // Get the borrowers list
/// let borrowers_list = midgard.get_borrowers_list(asset).await.unwrap();
///
/// assert!(!borrowers_list.get_borrowers().is_empty());
/// # });
/// ```
///
/// # Errors
/// todo
pub async fn get_borrowers_list(&mut self, asset: Option<String>) -> Result<BorrowersList> {
// Wait for rate limit timer
self.sleep_until_ok_to_call().await;
self.set_last_call(Utc::now());
api_get_borrowers_list(self.get_config().get_base_url(), asset).await
}
}
#[cfg(test)]
mod tests {
use rand::prelude::*;
use serde_json::json;
use super::*;
#[tokio::test]
async fn test_get_borrowers_details() {
// Create a new instance of Midgard
let mut midgard = Midgard::new();
// Get two random addresses from the list of borrowers
let borrowers = midgard.get_borrowers_list(None).await.unwrap();
let address_1 = borrowers.get_borrowers().choose(&mut rand::thread_rng()).unwrap().clone();
let address_2 = borrowers.get_borrowers().choose(&mut rand::thread_rng()).unwrap().clone();
let address = vec![address_1, address_2].join(",");
// Get the borrowers details
let borrowers_details = midgard.get_borrowers_details(&address).await.unwrap();
println!("borrowers_details: {}", json!(borrowers_details));
assert!(!borrowers_details.get_pools().is_empty());
}
#[tokio::test]
async fn test_get_borrowers_list() {
// Create a new instance of Midgard
let mut midgard = Midgard::new();
// Set the asset
let asset = Some("BTC.BTC".to_string());
// Get the borrowers list
let borrowers_list = midgard.get_borrowers_list(asset).await.unwrap();
println!("borrowers_list: {}", json!(borrowers_list));
assert!(!borrowers_list.get_borrowers().is_empty());
}
}