1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6use crate::types::common::UserId;
7use crate::types::message::PhotoSize;
8
9#[derive(Clone, Debug, Deserialize, Serialize)]
11#[non_exhaustive]
12pub struct User {
13 pub id: UserId,
14 pub is_bot: bool,
15 pub first_name: String,
16 #[serde(default, skip_serializing_if = "Option::is_none")]
17 pub last_name: Option<String>,
18 #[serde(default, skip_serializing_if = "Option::is_none")]
19 pub username: Option<String>,
20 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub language_code: Option<String>,
22 #[serde(flatten)]
23 pub extra: BTreeMap<String, Value>,
24}
25
26#[derive(Clone, Debug, Deserialize, Serialize)]
28#[non_exhaustive]
29pub struct UserProfilePhotos {
30 pub total_count: u64,
31 pub photos: Vec<Vec<PhotoSize>>,
32}
33
34#[derive(Clone, Debug, Serialize)]
36pub struct GetUserProfilePhotosRequest {
37 pub user_id: UserId,
38 #[serde(default, skip_serializing_if = "Option::is_none")]
39 pub offset: Option<u32>,
40 #[serde(default, skip_serializing_if = "Option::is_none")]
41 pub limit: Option<u8>,
42}
43
44impl GetUserProfilePhotosRequest {
45 pub fn new(user_id: UserId) -> Self {
46 Self {
47 user_id,
48 offset: None,
49 limit: None,
50 }
51 }
52}