Skip to main content

vkapi2/users/
types.rs

1use serde::{Deserialize, Serialize};
2
3// fn bool_from_int<'de, D>(deserializer: D) -> Result<Option<bool>, D::Error>
4//     where
5//         D: Deserializer<'de>,
6// {
7//     let opt = Option::deserialize(deserializer)?;
8//     match opt {
9//         Some(val) => match val {
10//             0 => Ok(Some(false)),
11//             1 => Ok(Some(true)),
12//             _ => Ok(None),
13//         },
14//         None => Ok(None),
15//     }
16// }
17
18pub 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}