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
use crate::{
models::{Account, Hotspot, Oui, Validator},
*,
};
pub fn all(client: &Client) -> Stream<Account> {
client.fetch_stream("/accounts", NO_QUERY)
}
pub async fn get(client: &Client, address: &str) -> Result<Account> {
client
.fetch(&format!("/accounts/{}", address), NO_QUERY)
.await
}
pub fn hotspots(client: &Client, address: &str) -> Stream<Hotspot> {
client.fetch_stream(&format!("/accounts/{}/hotspots", address), NO_QUERY)
}
pub fn ouis(client: &Client, address: &str) -> Stream<Oui> {
client.fetch_stream(&format!("/accounts/{}/ouis", address), NO_QUERY)
}
pub fn validators(client: &Client, address: &str) -> Stream<Validator> {
client.fetch_stream(&format!("/accounts/{}/validators", address), NO_QUERY)
}
pub async fn richest(client: &Client, limit: Option<u32>) -> Result<Vec<Account>> {
client
.fetch(
&format!("/accounts/rich?limit={}", limit.unwrap_or(1000)),
NO_QUERY,
)
.await
}
#[cfg(test)]
mod test {
use super::*;
use tokio::test;
#[test]
async fn all() {
let client = Client::default();
let accounts =
accounts::all(&client)
.take(10)
.fold(vec![], |mut acc, account| async move {
acc.push(account.unwrap().address);
acc
});
assert_eq!(accounts.await.len(), 10);
}
#[test]
async fn get() {
let client = Client::default();
let account = accounts::get(
&client,
"13WRNw4fmssJBvMqMnREwe1eCvUVXfnWXSXGcWXyVvAnQUF3D9R",
)
.await
.expect("account");
assert_eq!(
account.address,
"13WRNw4fmssJBvMqMnREwe1eCvUVXfnWXSXGcWXyVvAnQUF3D9R"
);
}
#[test]
async fn ouis() {
let client = Client::default();
let ouis = accounts::ouis(
&client,
"13tyMLKRFYURNBQqLSqNJg9k41maP1A7Bh8QYxR13oWv7EnFooc",
)
.into_vec()
.await
.expect("oui list");
assert_eq!(ouis.len(), 1);
}
#[test]
async fn hotspots() {
let client = Client::default();
let hotspots = accounts::hotspots(
&client,
"13WRNw4fmssJBvMqMnREwe1eCvUVXfnWXSXGcWXyVvAnQUF3D9R",
)
.into_vec()
.await
.expect("hotspot list");
assert!(hotspots.len() > 0);
}
#[test]
async fn richest() {
let client = Client::default();
let richest = accounts::richest(&client, Some(10))
.await
.expect("richet list");
assert_eq!(richest.len(), 10);
}
}