lichess_api/model/account/
timeline.rs1use 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}