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}