1use serde::{Deserialize, Serialize};
2
3pub struct UsersReportOptions {
19 pub comment: String,
20}
21
22impl Default for UsersReportOptions {
23 fn default() -> Self {
24 Self {
25 comment: "".to_string(),
26 }
27 }
28}
29
30pub enum User {
31 Id(usize),
32 ScreenName(String),
33}
34
35pub enum Fields {
36 Activities,
37 About,
38 Blacklisted,
39 BlacklistedByMe,
40 Books,
41 Bdate,
42 CanBeInvitedGroup,
43 CanPost,
44 CanSeeAllPosts,
45 CanSeeAudio,
46 CanSendFriendRequest,
47 CanWritePrivateMessage,
48 Career,
49 CommonCount,
50 Connections,
51 Contacts,
52 City,
53 Country,
54 CropPhoto,
55 Domain,
56 Education,
57 Exports,
58 FollowersCount,
59 FriendStatus,
60 HasPhoto,
61 HasMobile,
62 HomeTown,
63 Photo100,
64 Photo200,
65 Photo200Orig,
66 Photo4000rig,
67 Photo50,
68 Sex,
69 Site,
70 Schools,
71 ScreenName,
72 Status,
73 Verified,
74 Games,
75 Interests,
76 IsFavorite,
77 IsFriend,
78 IsHiddenFromFeed,
79 LastSeen,
80 MaidenName,
81 Military,
82 Movies,
83 Music,
84 Nickname,
85 Occupation,
86 Online,
87 Personal,
88 PhotoId,
89 PhotoMax,
90 PhotoMaxOrig,
91 Quotes,
92 Relation,
93 Relatives,
94 Timezone,
95 Tv,
96 Universities,
97}
98
99pub enum NameCase {
100 Nom,
101 Gen,
102 Dat,
103 Acc,
104 Ins,
105 Abl,
106}
107
108pub enum ReportType {
109 Porn,
110 Spam,
111 Insult,
112 Advertisement,
113}
114#[derive(Debug, Deserialize, Serialize)]
115
116pub struct UserResponse {
117 pub response: Vec<UserProfile>,
118}
119
120#[derive(Debug, Deserialize, Serialize)]
121pub struct FollowersResponse {
122 pub items: Vec<UserProfile>,
123 pub count: usize,
124}
125
126#[derive(Debug, Deserialize, Serialize)]
127pub struct UserProfile {
128 pub id: usize,
129 pub first_name: String,
130 pub last_name: String,
131 pub can_access_closed: bool,
132 pub is_closed: bool,
133 pub about: Option<String>,
134 pub activities: Option<String>,
135 pub bdate: Option<String>,
136 pub blacklisted: Option<usize>,
137 pub blacklisted_by_me: Option<usize>,
138 pub photo_50: Option<String>,
139 pub books: Option<String>,
140 pub can_be_invited_group: Option<bool>,
141 pub can_post: Option<usize>,
142 pub can_see_all_posts: Option<usize>,
143 pub can_see_audio: Option<usize>,
144 pub can_send_friend_request: Option<usize>,
145 pub can_write_private_message: Option<usize>,
146 pub career: Option<Vec<Career>>,
147 pub common_count: Option<usize>,
148 pub connections: Option<String>,
149 pub mobile_phone: Option<String>,
150 pub home_phone: Option<String>,
151 pub city: Option<City>,
152 pub country: Option<Country>,
153 pub crop_photo: Option<Crop>,
154 pub domain: Option<String>,
155 pub university: Option<usize>,
156 pub university_name: Option<String>,
157 pub faculty: Option<usize>,
158 pub faculty_name: Option<String>,
159 pub graduation: Option<usize>,
160 pub exports: Option<String>,
161 pub followers_count: Option<usize>,
162 pub friend_status: Option<usize>,
163 pub has_photo: Option<usize>,
164 pub has_mobile: Option<usize>,
165 pub home_town: Option<String>,
166 pub photo_100: Option<String>,
167 pub photo_200: Option<String>,
168 pub photo_200_orig: Option<String>,
169 pub photo_400_orig: Option<String>,
170 pub sex: Option<usize>,
171 pub site: Option<String>,
172 pub schools: Option<Vec<School>>,
173 pub screen_name: Option<String>,
174 pub status: Option<String>,
175 pub verified: Option<usize>,
176 pub games: Option<String>,
177 pub interests: Option<String>,
178 pub is_favorite: Option<usize>,
179 pub is_friend: Option<usize>,
180 pub is_hidden_from_feed: Option<usize>,
181 pub last_seen: Option<LastSeen>,
182 pub maiden_name: Option<String>,
183 pub military: Option<Vec<Military>>,
184 pub movies: Option<String>,
185 pub music: Option<String>,
186 pub nickname: Option<String>,
187 pub occupation: Option<Occupation>,
188 pub online: Option<usize>,
189 pub personal: Option<Personal>,
190 pub photo_id: Option<String>,
191 pub photo_max: Option<String>,
192 pub photo_max_orig: Option<String>,
193 pub quotes: Option<String>,
194 pub relation: Option<usize>,
195 pub relation_partner: Option<RelationPartner>,
196 pub relatives: Option<Vec<Relatives>>,
197 pub timezone: Option<usize>,
198 pub tv: Option<String>,
199 pub universities: Option<Vec<Universities>>,
200}
201
202#[derive(Debug, Deserialize, Serialize)]
203pub struct Universities {
204 pub id: usize,
205 pub country: usize,
206 pub city: usize,
207 pub name: Option<String>,
208 pub faculty: Option<usize>,
209 pub faculty_name: Option<String>,
210 pub chair: Option<usize>,
211 pub chair_name: Option<String>,
212 pub graduation: Option<usize>,
213 pub education_form: Option<String>,
214 pub education_status: Option<String>,
215}
216
217#[derive(Debug, Deserialize, Serialize)]
218pub struct Relatives {
219 pub name: String,
220 pub id: usize,
221 #[serde(alias = "type")]
222 pub type_: Option<String>,
223}
224
225#[derive(Debug, Deserialize, Serialize)]
226pub struct RelationPartner {
227 pub first_name: String,
228 pub id: usize,
229 pub last_name: String,
230}
231
232#[derive(Debug, Deserialize, Serialize)]
233pub struct Personal {
234 pub political: Option<usize>,
235 pub religion: Option<String>,
236 pub inspired_by: Option<String>,
237 pub langs: Option<Vec<String>>,
238 pub life_main: Option<usize>,
239 pub smoking: Option<usize>,
240 pub alcohol: Option<usize>,
241 pub people_main: Option<usize>,
242}
243
244#[derive(Debug, Deserialize, Serialize)]
245pub struct Occupation {
246 #[serde(alias = "type")]
247 pub type_: Option<String>,
248 pub id: Option<usize>,
249 pub name: Option<String>,
250}
251
252#[derive(Debug, Deserialize, Serialize)]
253pub struct Military {
254 pub unit: Option<String>,
255 pub unit_id: Option<usize>,
256 pub country_id: Option<usize>,
257 pub from: Option<usize>,
258 pub until: Option<usize>,
259}
260
261#[derive(Debug, Deserialize, Serialize)]
262pub struct LastSeen {
263 pub time: usize,
264 pub platform: usize,
265}
266
267#[derive(Debug, Deserialize, Serialize)]
268pub struct School {
269 pub id: String,
270 pub country: usize,
271 pub city: usize,
272 pub name: String,
273 pub year_from: Option<usize>,
274 pub year_to: Option<usize>,
275 pub year_graduated: Option<usize>,
276 pub class: Option<String>,
277 pub speciality: Option<String>,
278 #[serde(alias = "type")]
279 pub type_: Option<usize>,
280 pub type_str: Option<String>,
281}
282
283#[derive(Debug, Deserialize, Serialize)]
284pub struct Crop {
285 pub crop: Coordinates,
286 pub photo: Photo,
287}
288
289#[derive(Debug, Deserialize, Serialize)]
290pub struct Photo {
291 pub album_id: i64,
292 pub date: usize,
293 pub has_tags: bool,
294 pub id: usize,
295 pub owner_id: usize,
296 pub post_id: usize,
297 pub sizes: Vec<Sizes>,
298}
299
300#[derive(Debug, Deserialize, Serialize)]
301pub struct Sizes {
302 pub height: usize,
303 #[serde(alias = "type")]
304 pub type_: String,
305 pub url: String,
306 pub width: usize,
307}
308
309#[derive(Debug, Deserialize, Serialize)]
310pub struct Coordinates {
311 pub x: f32,
312 pub x2: f32,
313 pub y: f32,
314 pub y2: f32,
315}
316
317#[derive(Debug, Deserialize, Serialize)]
318pub struct City {
319 pub id: usize,
320 pub title: String,
321}
322
323#[derive(Debug, Deserialize, Serialize)]
324pub struct Country {
325 pub id: usize,
326 pub title: String,
327}
328
329#[derive(Debug, Deserialize, Serialize)]
330pub struct Career {
331 pub group_id: Option<usize>,
332 pub company: Option<String>,
333 pub country_id: usize,
334 pub city_id: Option<usize>,
335 pub city_name: Option<String>,
336 pub from: Option<usize>,
337 pub until: Option<usize>,
338 pub position: Option<String>,
339}
340
341pub struct UserGetOptions {
342 pub user_ids: Vec<User>,
343 pub fields: Vec<Fields>,
344 pub name_case: NameCase,
345}
346
347pub struct UserGetFollowersOptions {
348 pub fields: Vec<Fields>,
349 pub name_case: NameCase,
350}
351
352impl Default for UserGetFollowersOptions {
353 fn default() -> Self {
354 Self {
355 fields: Vec::new(),
356 name_case: NameCase::Nom,
357 }
358 }
359}
360
361impl Default for UserGetOptions {
362 fn default() -> Self {
363 Self {
364 user_ids: Vec::new(),
365 fields: Vec::new(),
366 name_case: NameCase::Nom,
367 }
368 }
369}