yuque/
serializer.rs

1use serde::Deserialize;
2
3#[derive(Debug, Deserialize)]
4pub struct APIResponse<T> {
5    pub data: T,
6    #[serde(default)]
7    pub abilities: Option<Abilities>,
8}
9
10#[derive(Debug, Deserialize)]
11pub struct Abilities {
12    #[serde(flatten)]
13    pub base: BaseAbilities,
14    #[serde(default)]
15    pub group_user: BaseAbilities,
16    #[serde(default)]
17    pub repo: BaseAbilities,
18}
19
20#[derive(Debug, Deserialize, Default)]
21pub struct BaseAbilities {
22    #[serde(default)]
23    pub read: Option<bool>,
24    #[serde(default)]
25    pub update: Option<bool>,
26    #[serde(default)]
27    pub destroy: Option<bool>,
28}
29
30#[derive(Debug, Deserialize, Default)]
31pub struct Object {
32    pub id: u32,
33    #[serde(rename(deserialize = "type"), default)]
34    pub typ: Option<String>,
35    pub created_at: String,
36    pub updated_at: String,
37    pub _serializer: String,
38}
39
40#[derive(Debug, Deserialize, Default)]
41pub struct UserSerializer {
42    #[serde(flatten)]
43    pub object: Object,
44    pub name: String,
45    pub login: String,
46    pub avatar_url: String,
47    #[serde(default)]
48    pub books_count: Option<u32>,
49    #[serde(default)]
50    pub public_books_count: Option<u32>,
51    pub followers_count: u32,
52    pub following_count: u32,
53    #[serde(default)]
54    pub public: Option<u8>,
55    #[serde(default)]
56    pub description: Option<String>,
57}
58
59#[derive(Debug, Deserialize, Default)]
60pub struct GroupSerializer {
61    #[serde(flatten)]
62    pub object: Object,
63    pub name: String,
64    pub login: String,
65    pub avatar_url: String,
66    #[serde(default)]
67    pub owner_id: Option<u32>,
68    pub books_count: Option<u32>,
69    pub public_books_count: Option<u32>,
70    pub topics_count: u32,
71    pub public_topics_count: u32,
72    pub members_count: u32,
73    pub public: u8,
74    #[serde(default)]
75    pub description: Option<String>,
76}
77
78#[derive(Debug, Deserialize, Default)]
79pub struct GroupUserSerializer {
80    #[serde(flatten)]
81    pub object: Object,
82    pub group_id: u32,
83    pub user_id: u32,
84    #[serde(default)]
85    pub group: Option<UserSerializer>,
86    pub user: UserSerializer,
87    pub role: u8,
88    pub visibility: u8,
89    pub status: u8,
90}
91
92#[derive(Debug, Deserialize, Default)]
93pub struct BookSerializer {
94    #[serde(flatten)]
95    pub object: Object,
96    pub slug: String,
97    pub name: String,
98    pub user_id: u32,
99    #[serde(default)]
100    pub description: Option<String>,
101    #[serde(default)]
102    pub creator_id: Option<u32>,
103    pub public: u8,
104    pub items_count: u32,
105    pub likes_count: u32,
106    pub watches_count: u32,
107    #[serde(default)]
108    pub content_updated_at: Option<String>,
109    #[serde(default)]
110    pub namespace: Option<String>,
111    #[serde(default)]
112    pub user: Option<UserSerializer>,
113
114    #[serde(default)]
115    pub toc: Option<String>,
116    #[serde(default)]
117    pub toc_yml: Option<String>,
118    #[serde(default)]
119    pub pinned_at: Option<String>,
120    #[serde(default)]
121    pub archived_at: Option<String>,
122}
123
124#[derive(Debug, Deserialize, Default)]
125pub struct DocSerializer {
126    #[serde(flatten)]
127    pub object: Object,
128    pub slug: String,
129    pub title: String,
130    #[serde(default)]
131    pub description: Option<String>,
132    pub user_id: u32,
133    pub book_id: u32,
134    pub format: String,
135    pub public: u8,
136    pub status: u8,
137    pub view_status: u8,
138    pub read_status: u8,
139    #[serde(default)]
140    pub likes_count: Option<u32>,
141    #[serde(default)]
142    pub read_count: Option<u32>,
143    #[serde(default)]
144    pub comments_count: Option<u32>,
145    pub content_updated_at: String,
146    #[serde(default)]
147    pub published_at: Option<String>,
148    #[serde(default)]
149    pub first_published_at: Option<String>,
150    #[serde(default)]
151    pub draft_version: Option<u16>,
152    #[serde(default)]
153    pub last_editor_id: Option<u32>,
154    pub word_count: u32,
155    #[serde(default)]
156    pub cover: Option<String>,
157    #[serde(default)]
158    pub custom_description: Option<String>,
159    #[serde(default)]
160    pub last_editor: Option<UserSerializer>,
161    #[serde(default)]
162    pub book: Option<BookSerializer>,
163    #[serde(default)]
164    pub hits: Option<u32>,
165    #[serde(default)]
166    pub creator: Option<UserSerializer>,
167    #[serde(default)]
168    pub body: Option<String>,
169    #[serde(default)]
170    pub body_draft: Option<String>,
171    #[serde(default)]
172    pub body_html: Option<String>,
173    #[serde(default)]
174    pub body_lake: Option<String>,
175    #[serde(default)]
176    pub body_draft_lake: Option<String>,
177    #[serde(default)]
178    pub deleted_at: Option<String>,
179}