1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Deserialize)]
5pub struct SiteResponse {
6 pub site: SiteInfo,
7}
8
9#[derive(Debug, Deserialize)]
11pub struct SiteInfo {
12 pub title: String,
13}
14
15#[derive(Debug, Deserialize)]
17pub struct AboutResponse {
18 pub about: AboutInfo,
19}
20
21#[derive(Debug, Deserialize)]
23pub struct AboutInfo {
24 pub version: Option<String>,
25 pub installed_version: Option<String>,
26}
27
28#[derive(Debug, Deserialize)]
30pub struct TopicResponse {
31 #[serde(default)]
32 pub title: Option<String>,
33 #[serde(default)]
34 pub slug: Option<String>,
35 pub post_stream: PostStream,
36}
37
38#[derive(Debug, Deserialize)]
40pub struct PostStream {
41 pub posts: Vec<Post>,
42}
43
44#[derive(Debug, Deserialize)]
46pub struct Post {
47 pub id: u64,
48 #[serde(default)]
49 pub raw: Option<String>,
50 #[serde(default)]
51 pub updated_at: Option<String>,
52 #[serde(default)]
53 pub created_at: Option<String>,
54}
55
56#[derive(Debug, Deserialize, Serialize)]
57pub struct CustomEmoji {
58 pub name: String,
59 pub url: String,
60}
61
62#[derive(Debug, Deserialize)]
64pub struct CategoryResponse {
65 #[serde(default)]
66 pub category: Option<CategoryInfo>,
67 pub topic_list: TopicList,
68}
69
70#[derive(Debug, Deserialize, Serialize, Clone)]
72pub struct CategoryInfo {
73 pub name: String,
74 pub slug: String,
75 #[serde(default)]
76 pub color: Option<String>,
77 #[serde(default)]
78 pub text_color: Option<String>,
79 pub id: Option<u64>,
80 #[serde(default)]
81 pub subcategory_list: Vec<CategoryInfo>,
82 #[serde(default)]
83 pub parent_category_id: Option<u64>,
84}
85
86#[derive(Debug, Deserialize)]
88pub struct CategoriesResponse {
89 pub category_list: CategoryList,
90}
91
92#[derive(Debug, Deserialize)]
94pub struct CategoryList {
95 pub categories: Vec<CategoryInfo>,
96}
97
98#[derive(Debug, Deserialize)]
100pub struct TopicList {
101 pub topics: Vec<TopicSummary>,
102}
103
104#[derive(Debug, Deserialize, Serialize)]
106pub struct TopicSummary {
107 pub id: u64,
108 pub title: String,
109 pub slug: String,
110}
111
112#[derive(Debug, Deserialize, Serialize, Clone)]
114pub struct GroupSummary {
115 pub id: u64,
116 pub name: String,
117 #[serde(default)]
118 pub full_name: Option<String>,
119}
120
121#[derive(Debug, Deserialize)]
123pub struct GroupsResponse {
124 pub groups: Vec<GroupSummary>,
125}
126
127#[derive(Debug, Deserialize, Serialize, Clone)]
128pub struct GroupMember {
129 pub id: u64,
130 pub username: String,
131 #[serde(default)]
132 pub name: Option<String>,
133}
134
135#[derive(Debug, Deserialize)]
136pub struct GroupMembersResponse {
137 pub members: Vec<GroupMember>,
138}
139
140#[derive(Debug, Deserialize)]
142pub struct GroupDetailResponse {
143 pub group: GroupDetail,
144}
145
146#[derive(Debug, Deserialize, Serialize, Clone)]
148pub struct GroupDetail {
149 pub id: u64,
150 pub name: String,
151 #[serde(default)]
152 pub full_name: Option<String>,
153 #[serde(default)]
154 pub title: Option<String>,
155 #[serde(default)]
156 pub grant_trust_level: Option<u64>,
157 #[serde(default)]
158 pub visibility_level: Option<u64>,
159 #[serde(default)]
160 pub mentionable_level: Option<u64>,
161 #[serde(default)]
162 pub messageable_level: Option<u64>,
163 #[serde(default)]
164 pub default_notification_level: Option<u64>,
165 #[serde(default)]
166 pub members_visibility_level: Option<u64>,
167 #[serde(default)]
168 pub primary_group: Option<bool>,
169 #[serde(default)]
170 pub public_admission: Option<bool>,
171 #[serde(default)]
172 pub public_exit: Option<bool>,
173 #[serde(default)]
174 pub allow_membership_requests: Option<bool>,
175 #[serde(default)]
176 pub automatic_membership_email_domains: Option<String>,
177 #[serde(default)]
178 pub automatic_membership_retroactive: Option<bool>,
179 #[serde(default)]
180 pub membership_request_template: Option<String>,
181 #[serde(default)]
182 pub flair_icon: Option<String>,
183 #[serde(default)]
184 pub flair_upload_id: Option<u64>,
185 #[serde(default)]
186 pub flair_color: Option<String>,
187 #[serde(default)]
188 pub flair_background_color: Option<String>,
189 #[serde(default)]
190 pub bio_raw: Option<String>,
191}
192
193#[derive(Debug, Deserialize)]
195pub struct CreatePostResponse {
196 pub id: u64,
197 pub topic_id: u64,
198}
199
200#[derive(Debug, Deserialize)]
202pub struct CreateCategoryResponse {
203 pub category: CreatedCategory,
204}
205
206#[derive(Debug, Deserialize)]
208pub struct CreatedCategory {
209 pub id: u64,
210}
211
212#[derive(Debug, Deserialize)]
214pub struct CreateGroupResponse {
215 pub group: CreatedGroup,
216}
217
218#[derive(Debug, Deserialize)]
220pub struct CreatedGroup {
221 pub id: u64,
222}