1use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct AdultContentPref {
9 pub enabled: bool,
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
14#[serde(rename_all = "camelCase")]
15pub struct BskyAppProgressGuide {
16 pub guide: String,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize)]
21#[serde(rename_all = "camelCase")]
22pub struct BskyAppStatePref {
23 #[serde(skip_serializing_if = "Option::is_none")]
24 pub active_progress_guide: Option<BskyAppProgressGuide>,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub nuxs: Option<Vec<Nux>>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub queued_nudges: Option<Vec<String>>,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
32#[serde(rename_all = "camelCase")]
33pub struct ContentLabelPref {
34 pub label: String,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub labeler_did: Option<String>,
37 pub visibility: String,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
42#[serde(rename_all = "camelCase")]
43pub struct DeclaredAgePref {
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub is_over_age13: Option<bool>,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub is_over_age16: Option<bool>,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub is_over_age18: Option<bool>,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
53#[serde(rename_all = "camelCase")]
54pub struct FeedViewPref {
55 pub feed: String,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub hide_quote_posts: Option<bool>,
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub hide_replies: Option<bool>,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub hide_replies_by_like_count: Option<i64>,
62 #[serde(skip_serializing_if = "Option::is_none")]
63 pub hide_replies_by_unfollowed: Option<bool>,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub hide_reposts: Option<bool>,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
69#[serde(rename_all = "camelCase")]
70pub struct HiddenPostsPref {
71 pub items: Vec<String>,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize)]
75#[serde(rename_all = "camelCase")]
76pub struct InterestsPref {
77 pub tags: Vec<String>,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
82#[serde(rename_all = "camelCase")]
83pub struct KnownFollowers {
84 pub count: i64,
85 pub followers: Vec<ProfileViewBasic>,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
89#[serde(rename_all = "camelCase")]
90pub struct LabelerPrefItem {
91 pub did: String,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
95#[serde(rename_all = "camelCase")]
96pub struct LabelersPref {
97 pub labelers: Vec<LabelerPrefItem>,
98}
99
100#[derive(Debug, Clone, Serialize, Deserialize)]
102#[serde(rename_all = "camelCase")]
103pub struct LiveEventPreferences {
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub hidden_feed_ids: Option<Vec<String>>,
106 #[serde(skip_serializing_if = "Option::is_none")]
107 pub hide_all_feeds: Option<bool>,
108}
109
110#[derive(Debug, Clone, Serialize, Deserialize)]
112#[serde(rename_all = "camelCase")]
113pub struct MutedWord {
114 #[serde(skip_serializing_if = "Option::is_none")]
115 pub actor_target: Option<String>,
116 #[serde(skip_serializing_if = "Option::is_none")]
117 pub expires_at: Option<String>,
118 #[serde(skip_serializing_if = "Option::is_none")]
119 pub id: Option<String>,
120 pub targets: Vec<MutedWordTarget>,
121 pub value: String,
122}
123
124pub type MutedWordTarget = String;
125pub const MUTED_WORD_TARGET_CONTENT: &str = "content";
126pub const MUTED_WORD_TARGET_TAG: &str = "tag";
127
128#[derive(Debug, Clone, Serialize, Deserialize)]
129#[serde(rename_all = "camelCase")]
130pub struct MutedWordsPref {
131 pub items: Vec<MutedWord>,
132}
133
134#[derive(Debug, Clone, Serialize, Deserialize)]
136#[serde(rename_all = "camelCase")]
137pub struct Nux {
138 pub completed: bool,
139 #[serde(skip_serializing_if = "Option::is_none")]
140 pub data: Option<String>,
141 #[serde(skip_serializing_if = "Option::is_none")]
142 pub expires_at: Option<String>,
143 pub id: String,
144}
145
146#[derive(Debug, Clone, Serialize, Deserialize)]
147#[serde(rename_all = "camelCase")]
148pub struct PersonalDetailsPref {
149 #[serde(skip_serializing_if = "Option::is_none")]
150 pub birth_date: Option<String>,
151}
152
153#[derive(Debug, Clone, Serialize, Deserialize)]
155#[serde(rename_all = "camelCase")]
156pub struct PostInteractionSettingsPref {
157 #[serde(skip_serializing_if = "Option::is_none")]
158 pub postgate_embedding_rules: Option<Vec<serde_json::Value>>,
159 #[serde(skip_serializing_if = "Option::is_none")]
160 pub threadgate_allow_rules: Option<Vec<serde_json::Value>>,
161}
162
163pub type Preferences = Vec<serde_json::Value>;
164
165#[derive(Debug, Clone, Serialize, Deserialize)]
166#[serde(rename_all = "camelCase")]
167pub struct ProfileAssociated {
168 #[serde(skip_serializing_if = "Option::is_none")]
169 pub activity_subscription: Option<ProfileAssociatedActivitySubscription>,
170 #[serde(skip_serializing_if = "Option::is_none")]
171 pub chat: Option<ProfileAssociatedChat>,
172 #[serde(skip_serializing_if = "Option::is_none")]
173 pub feedgens: Option<i64>,
174 #[serde(skip_serializing_if = "Option::is_none")]
175 pub germ: Option<ProfileAssociatedGerm>,
176 #[serde(skip_serializing_if = "Option::is_none")]
177 pub labeler: Option<bool>,
178 #[serde(skip_serializing_if = "Option::is_none")]
179 pub lists: Option<i64>,
180 #[serde(skip_serializing_if = "Option::is_none")]
181 pub starter_packs: Option<i64>,
182}
183
184#[derive(Debug, Clone, Serialize, Deserialize)]
185#[serde(rename_all = "camelCase")]
186pub struct ProfileAssociatedActivitySubscription {
187 pub allow_subscriptions: String,
188}
189
190#[derive(Debug, Clone, Serialize, Deserialize)]
191#[serde(rename_all = "camelCase")]
192pub struct ProfileAssociatedChat {
193 pub allow_incoming: String,
194}
195
196#[derive(Debug, Clone, Serialize, Deserialize)]
197#[serde(rename_all = "camelCase")]
198pub struct ProfileAssociatedGerm {
199 pub message_me_url: String,
200 pub show_button_to: String,
201}
202
203#[derive(Debug, Clone, Serialize, Deserialize)]
204#[serde(rename_all = "camelCase")]
205pub struct ProfileView {
206 #[serde(skip_serializing_if = "Option::is_none")]
207 pub associated: Option<ProfileAssociated>,
208 #[serde(skip_serializing_if = "Option::is_none")]
209 pub avatar: Option<String>,
210 #[serde(skip_serializing_if = "Option::is_none")]
211 pub created_at: Option<String>,
212 #[serde(skip_serializing_if = "Option::is_none")]
213 pub debug: Option<serde_json::Value>,
214 #[serde(skip_serializing_if = "Option::is_none")]
215 pub description: Option<String>,
216 pub did: String,
217 #[serde(skip_serializing_if = "Option::is_none")]
218 pub display_name: Option<String>,
219 pub handle: String,
220 #[serde(skip_serializing_if = "Option::is_none")]
221 pub indexed_at: Option<String>,
222 #[serde(skip_serializing_if = "Option::is_none")]
223 pub labels: Option<Vec<crate::com::atproto::label::defs::Label>>,
224 #[serde(skip_serializing_if = "Option::is_none")]
225 pub pronouns: Option<String>,
226 #[serde(skip_serializing_if = "Option::is_none")]
227 pub status: Option<StatusView>,
228 #[serde(skip_serializing_if = "Option::is_none")]
229 pub verification: Option<VerificationState>,
230 #[serde(skip_serializing_if = "Option::is_none")]
231 pub viewer: Option<ViewerState>,
232}
233
234#[derive(Debug, Clone, Serialize, Deserialize)]
235#[serde(rename_all = "camelCase")]
236pub struct ProfileViewBasic {
237 #[serde(skip_serializing_if = "Option::is_none")]
238 pub associated: Option<ProfileAssociated>,
239 #[serde(skip_serializing_if = "Option::is_none")]
240 pub avatar: Option<String>,
241 #[serde(skip_serializing_if = "Option::is_none")]
242 pub created_at: Option<String>,
243 #[serde(skip_serializing_if = "Option::is_none")]
244 pub debug: Option<serde_json::Value>,
245 pub did: String,
246 #[serde(skip_serializing_if = "Option::is_none")]
247 pub display_name: Option<String>,
248 pub handle: String,
249 #[serde(skip_serializing_if = "Option::is_none")]
250 pub labels: Option<Vec<crate::com::atproto::label::defs::Label>>,
251 #[serde(skip_serializing_if = "Option::is_none")]
252 pub pronouns: Option<String>,
253 #[serde(skip_serializing_if = "Option::is_none")]
254 pub status: Option<StatusView>,
255 #[serde(skip_serializing_if = "Option::is_none")]
256 pub verification: Option<VerificationState>,
257 #[serde(skip_serializing_if = "Option::is_none")]
258 pub viewer: Option<ViewerState>,
259}
260
261#[derive(Debug, Clone, Serialize, Deserialize)]
262#[serde(rename_all = "camelCase")]
263pub struct ProfileViewDetailed {
264 #[serde(skip_serializing_if = "Option::is_none")]
265 pub associated: Option<ProfileAssociated>,
266 #[serde(skip_serializing_if = "Option::is_none")]
267 pub avatar: Option<String>,
268 #[serde(skip_serializing_if = "Option::is_none")]
269 pub banner: Option<String>,
270 #[serde(skip_serializing_if = "Option::is_none")]
271 pub created_at: Option<String>,
272 #[serde(skip_serializing_if = "Option::is_none")]
273 pub debug: Option<serde_json::Value>,
274 #[serde(skip_serializing_if = "Option::is_none")]
275 pub description: Option<String>,
276 pub did: String,
277 #[serde(skip_serializing_if = "Option::is_none")]
278 pub display_name: Option<String>,
279 #[serde(skip_serializing_if = "Option::is_none")]
280 pub followers_count: Option<i64>,
281 #[serde(skip_serializing_if = "Option::is_none")]
282 pub follows_count: Option<i64>,
283 pub handle: String,
284 #[serde(skip_serializing_if = "Option::is_none")]
285 pub indexed_at: Option<String>,
286 #[serde(skip_serializing_if = "Option::is_none")]
287 pub joined_via_starter_pack: Option<crate::app::bsky::graph::defs::StarterPackViewBasic>,
288 #[serde(skip_serializing_if = "Option::is_none")]
289 pub labels: Option<Vec<crate::com::atproto::label::defs::Label>>,
290 #[serde(skip_serializing_if = "Option::is_none")]
291 pub pinned_post: Option<crate::com::atproto::repo::strong_ref::Main>,
292 #[serde(skip_serializing_if = "Option::is_none")]
293 pub posts_count: Option<i64>,
294 #[serde(skip_serializing_if = "Option::is_none")]
295 pub pronouns: Option<String>,
296 #[serde(skip_serializing_if = "Option::is_none")]
297 pub status: Option<StatusView>,
298 #[serde(skip_serializing_if = "Option::is_none")]
299 pub verification: Option<VerificationState>,
300 #[serde(skip_serializing_if = "Option::is_none")]
301 pub viewer: Option<ViewerState>,
302 #[serde(skip_serializing_if = "Option::is_none")]
303 pub website: Option<String>,
304}
305
306#[derive(Debug, Clone, Serialize, Deserialize)]
307#[serde(rename_all = "camelCase")]
308pub struct SavedFeed {
309 pub id: String,
310 pub pinned: bool,
311 #[serde(rename = "type")]
312 pub r#type: String,
313 pub value: String,
314}
315
316#[derive(Debug, Clone, Serialize, Deserialize)]
317#[serde(rename_all = "camelCase")]
318pub struct SavedFeedsPref {
319 pub pinned: Vec<String>,
320 pub saved: Vec<String>,
321 #[serde(skip_serializing_if = "Option::is_none")]
322 pub timeline_index: Option<i64>,
323}
324
325#[derive(Debug, Clone, Serialize, Deserialize)]
326#[serde(rename_all = "camelCase")]
327pub struct SavedFeedsPrefV2 {
328 pub items: Vec<SavedFeed>,
329}
330
331#[derive(Debug, Clone, Serialize, Deserialize)]
332#[serde(rename_all = "camelCase")]
333pub struct StatusView {
334 #[serde(skip_serializing_if = "Option::is_none")]
335 pub cid: Option<String>,
336 #[serde(skip_serializing_if = "Option::is_none")]
337 pub embed: Option<serde_json::Value>,
338 #[serde(skip_serializing_if = "Option::is_none")]
339 pub expires_at: Option<String>,
340 #[serde(skip_serializing_if = "Option::is_none")]
341 pub is_active: Option<bool>,
342 #[serde(skip_serializing_if = "Option::is_none")]
343 pub is_disabled: Option<bool>,
344 pub record: serde_json::Value,
345 pub status: String,
346 #[serde(skip_serializing_if = "Option::is_none")]
347 pub uri: Option<String>,
348}
349
350#[derive(Debug, Clone, Serialize, Deserialize)]
351#[serde(rename_all = "camelCase")]
352pub struct ThreadViewPref {
353 #[serde(skip_serializing_if = "Option::is_none")]
354 pub sort: Option<String>,
355}
356
357#[derive(Debug, Clone, Serialize, Deserialize)]
359#[serde(rename_all = "camelCase")]
360pub struct VerificationPrefs {
361 #[serde(skip_serializing_if = "Option::is_none")]
362 pub hide_badges: Option<bool>,
363}
364
365#[derive(Debug, Clone, Serialize, Deserialize)]
367#[serde(rename_all = "camelCase")]
368pub struct VerificationState {
369 pub trusted_verifier_status: String,
370 pub verifications: Vec<VerificationView>,
371 pub verified_status: String,
372}
373
374#[derive(Debug, Clone, Serialize, Deserialize)]
376#[serde(rename_all = "camelCase")]
377pub struct VerificationView {
378 pub created_at: String,
379 pub is_valid: bool,
380 pub issuer: String,
381 pub uri: String,
382}
383
384#[derive(Debug, Clone, Serialize, Deserialize)]
386#[serde(rename_all = "camelCase")]
387pub struct ViewerState {
388 #[serde(skip_serializing_if = "Option::is_none")]
389 pub activity_subscription: Option<crate::app::bsky::notification::defs::ActivitySubscription>,
390 #[serde(skip_serializing_if = "Option::is_none")]
391 pub blocked_by: Option<bool>,
392 #[serde(skip_serializing_if = "Option::is_none")]
393 pub blocking: Option<String>,
394 #[serde(skip_serializing_if = "Option::is_none")]
395 pub blocking_by_list: Option<crate::app::bsky::graph::defs::ListViewBasic>,
396 #[serde(skip_serializing_if = "Option::is_none")]
397 pub followed_by: Option<String>,
398 #[serde(skip_serializing_if = "Option::is_none")]
399 pub following: Option<String>,
400 #[serde(skip_serializing_if = "Option::is_none")]
401 pub known_followers: Option<KnownFollowers>,
402 #[serde(skip_serializing_if = "Option::is_none")]
403 pub muted: Option<bool>,
404 #[serde(skip_serializing_if = "Option::is_none")]
405 pub muted_by_list: Option<crate::app::bsky::graph::defs::ListViewBasic>,
406}