Skip to main content

lichess_api/model/account/
timeline.rs

1use crate::model::{PerfType, Title};
2
3use serde::{Deserialize, Serialize};
4use serde_with::skip_serializing_none;
5use std::collections::HashMap;
6
7#[derive(Default, Clone, Debug, Serialize)]
8#[skip_serializing_none]
9pub struct GetQuery {
10    pub since: Option<u64>,
11    pub nb: Option<u32>,
12}
13
14pub type GetRequest = crate::model::Request<GetQuery>;
15
16impl GetRequest {
17    pub fn new(query: GetQuery) -> Self {
18        Self::get("/api/timeline", query, None)
19    }
20}
21
22impl From<GetQuery> for GetRequest {
23    fn from(query: GetQuery) -> Self {
24        Self::new(query)
25    }
26}
27
28#[derive(Clone, Debug, Serialize, Deserialize)]
29pub struct Timeline {
30    pub entries: Vec<TimelineEntry>,
31    pub users: HashMap<String, TimelineUser>,
32}
33
34#[skip_serializing_none]
35#[derive(Clone, Debug, Serialize, Deserialize)]
36pub struct TimelineUser {
37    pub id: String,
38    pub name: String,
39    pub title: Option<Title>,
40    pub flair: Option<String>,
41    pub patron: Option<bool>,
42    #[serde(rename = "patronColor")]
43    pub patron_color: Option<u8>,
44}
45
46#[derive(Clone, Debug, Deserialize, Serialize)]
47#[serde(tag = "type")]
48#[serde(rename_all = "kebab-case")]
49pub enum TimelineEntry {
50    Follow { data: FollowData, date: u64 },
51    TeamJoin { data: TeamJoinData, date: u64 },
52    TeamCreate { data: TeamCreateData, date: u64 },
53    ForumPost { data: ForumPostData, date: u64 },
54    BlogPost { data: BlogPostData, date: u64 },
55    UblogPost { data: UblogPostData, date: u64 },
56    TourJoin { data: TourJoinData, date: u64 },
57    GameEnd { data: GameEndData, date: u64 },
58    SimulCreate { data: SimulData, date: u64 },
59    SimulJoin { data: SimulData, date: u64 },
60    StudyLike { data: StudyLikeData, date: u64 },
61    PlanStart { data: PlanStartData, date: u64 },
62    PlanRenew { data: PlanRenewData, date: u64 },
63    UblogPostLike { data: UblogPostLikeData, date: u64 },
64    StreamStart { data: StreamStartData, date: u64 },
65}
66
67#[derive(Clone, Debug, Deserialize, Serialize)]
68pub struct FollowData {
69    pub u1: String,
70    pub u2: String,
71}
72
73#[derive(Clone, Debug, Deserialize, Serialize)]
74#[serde(rename_all = "camelCase")]
75pub struct TeamJoinData {
76    pub user_id: String,
77    pub team_id: String,
78}
79
80#[derive(Clone, Debug, Deserialize, Serialize)]
81#[serde(rename_all = "camelCase")]
82pub struct TeamCreateData {
83    pub user_id: String,
84    pub team_id: String,
85}
86
87#[derive(Clone, Debug, Deserialize, Serialize)]
88#[serde(rename_all = "camelCase")]
89pub struct ForumPostData {
90    pub user_id: String,
91    pub topic_id: String,
92    pub topic_name: String,
93    pub post_id: String,
94}
95
96#[derive(Clone, Debug, Deserialize, Serialize)]
97pub struct BlogPostData {
98    pub id: String,
99    pub slug: String,
100    pub title: String,
101}
102
103#[derive(Clone, Debug, Deserialize, Serialize)]
104#[serde(rename_all = "camelCase")]
105pub struct UblogPostData {
106    pub user_id: String,
107    pub id: String,
108    pub slug: String,
109    pub title: String,
110}
111
112#[derive(Clone, Debug, Deserialize, Serialize)]
113#[serde(rename_all = "camelCase")]
114pub struct TourJoinData {
115    pub user_id: String,
116    pub tour_id: String,
117    pub tour_name: String,
118}
119
120#[derive(Clone, Debug, Deserialize, Serialize)]
121#[serde(rename_all = "camelCase")]
122pub struct GameEndData {
123    pub full_id: String,
124    pub opponent: String,
125    pub win: bool,
126    pub perf: PerfType,
127}
128
129#[derive(Clone, Debug, Deserialize, Serialize)]
130#[serde(rename_all = "camelCase")]
131pub struct SimulData {
132    pub user_id: String,
133    pub simul_id: String,
134    pub simul_name: String,
135}
136
137#[derive(Clone, Debug, Deserialize, Serialize)]
138#[serde(rename_all = "camelCase")]
139pub struct StudyLikeData {
140    pub user_id: String,
141    pub study_id: String,
142    pub study_name: String,
143}
144
145#[derive(Clone, Debug, Deserialize, Serialize)]
146#[serde(rename_all = "camelCase")]
147pub struct PlanStartData {
148    pub user_id: String,
149}
150
151#[derive(Clone, Debug, Deserialize, Serialize)]
152#[serde(rename_all = "camelCase")]
153pub struct PlanRenewData {
154    pub user_id: String,
155    pub months: u32,
156}
157
158#[derive(Clone, Debug, Deserialize, Serialize)]
159#[serde(rename_all = "camelCase")]
160pub struct UblogPostLikeData {
161    pub user_id: String,
162    pub id: String,
163    pub title: String,
164}
165
166#[derive(Clone, Debug, Deserialize, Serialize)]
167pub struct StreamStartData {
168    pub id: String,
169    pub title: String,
170}