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