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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
use crate::Resp;
#[derive(Debug, Deserialize)]
pub struct SampleResponse {
pub instances: Vec<Instance>,
}
impl Resp for SampleResponse {
type Item = Instance;
fn items(&self) -> &Vec<Self::Item> {
&self.instances
}
fn next(&self) -> Option<String> {
None
}
}
#[derive(Debug, Deserialize)]
pub struct ListResponse {
pub instances: Vec<Instance>,
pub pagination: Pagination,
}
impl Resp for ListResponse {
type Item = Instance;
fn items(&self) -> &Vec<Self::Item> {
&self.instances
}
fn next(&self) -> Option<String> {
self.pagination.next_id.clone()
}
}
#[derive(Debug, Deserialize)]
pub struct Pagination {
pub total: u64,
pub next_id: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct SearchResponse {
pub instances: Vec<Instance>,
pub pagination: Pagination,
}
impl Resp for SearchResponse {
type Item = Instance;
fn items(&self) -> &Vec<Self::Item> {
&self.instances
}
fn next(&self) -> Option<String> {
self.pagination.next_id.clone()
}
}
#[derive(Clone, Debug, Deserialize)]
pub struct Instance {
pub id: String,
pub name: String,
pub added_at: Option<String>,
pub updated_at: Option<String>,
pub checked_at: Option<String>,
pub uptime: i64,
pub up: bool,
pub dead: bool,
pub version: Option<String>,
pub ipv6: bool,
pub https_score: Option<i64>,
pub https_rank: Option<String>,
pub obs_score: Option<i64>,
pub users: String,
pub statuses: String,
pub connections: String,
pub open_registrations: bool,
pub info: Option<InstanceInfo>,
pub thumbnail: Option<String>,
pub thumbnail_proxy: Option<String>,
pub active_users: Option<i64>,
}
#[derive(Clone, Debug, Deserialize)]
pub struct InstanceInfo {
pub short_description: Option<String>,
pub full_description: Option<String>,
pub topic: Option<String>,
pub languages: Option<Vec<String>>,
pub other_languages_accepted: Option<bool>,
pub federates_with: Option<String>,
pub prohibited_content: Option<Vec<String>>,
pub categories: Option<Vec<String>>,
}