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<proto_blue_syntax::Did>,
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<proto_blue_syntax::AtUri>,
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: proto_blue_syntax::Did,
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<proto_blue_syntax::Datetime>,
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<proto_blue_syntax::Datetime>,
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<proto_blue_syntax::Datetime>,
151}
152
153#[derive(Debug, Clone, Serialize, Deserialize)]
154#[serde(tag = "$type")]
155pub enum PostInteractionSettingsPrefPostgateEmbeddingRulesItemRefs {
156 #[serde(rename = "app.bsky.feed.postgate#disableRule")]
157 BskyFeedPostgateDisableRule(Box<crate::app::bsky::feed::postgate::DisableRule>),
158 #[serde(other)]
159 Other,
160}
161
162#[derive(Debug, Clone, Serialize, Deserialize)]
163#[serde(tag = "$type")]
164pub enum PostInteractionSettingsPrefThreadgateAllowRulesItemRefs {
165 #[serde(rename = "app.bsky.feed.threadgate#mentionRule")]
166 BskyFeedThreadgateMentionRule(Box<crate::app::bsky::feed::threadgate::MentionRule>),
167 #[serde(rename = "app.bsky.feed.threadgate#followerRule")]
168 BskyFeedThreadgateFollowerRule(Box<crate::app::bsky::feed::threadgate::FollowerRule>),
169 #[serde(rename = "app.bsky.feed.threadgate#followingRule")]
170 BskyFeedThreadgateFollowingRule(Box<crate::app::bsky::feed::threadgate::FollowingRule>),
171 #[serde(rename = "app.bsky.feed.threadgate#listRule")]
172 BskyFeedThreadgateListRule(Box<crate::app::bsky::feed::threadgate::ListRule>),
173 #[serde(other)]
174 Other,
175}
176
177#[derive(Debug, Clone, Serialize, Deserialize)]
179#[serde(rename_all = "camelCase")]
180pub struct PostInteractionSettingsPref {
181 #[serde(skip_serializing_if = "Option::is_none")]
182 pub postgate_embedding_rules:
183 Option<Vec<PostInteractionSettingsPrefPostgateEmbeddingRulesItemRefs>>,
184 #[serde(skip_serializing_if = "Option::is_none")]
185 pub threadgate_allow_rules:
186 Option<Vec<PostInteractionSettingsPrefThreadgateAllowRulesItemRefs>>,
187}
188
189pub type Preferences = Vec<serde_json::Value>;
190
191#[derive(Debug, Clone, Serialize, Deserialize)]
192#[serde(rename_all = "camelCase")]
193pub struct ProfileAssociated {
194 #[serde(skip_serializing_if = "Option::is_none")]
195 pub activity_subscription: Option<ProfileAssociatedActivitySubscription>,
196 #[serde(skip_serializing_if = "Option::is_none")]
197 pub chat: Option<ProfileAssociatedChat>,
198 #[serde(skip_serializing_if = "Option::is_none")]
199 pub feedgens: Option<i64>,
200 #[serde(skip_serializing_if = "Option::is_none")]
201 pub germ: Option<ProfileAssociatedGerm>,
202 #[serde(skip_serializing_if = "Option::is_none")]
203 pub labeler: Option<bool>,
204 #[serde(skip_serializing_if = "Option::is_none")]
205 pub lists: Option<i64>,
206 #[serde(skip_serializing_if = "Option::is_none")]
207 pub starter_packs: Option<i64>,
208}
209
210#[derive(Debug, Clone, Serialize, Deserialize)]
211#[serde(rename_all = "camelCase")]
212pub struct ProfileAssociatedActivitySubscription {
213 pub allow_subscriptions: String,
214}
215
216#[derive(Debug, Clone, Serialize, Deserialize)]
217#[serde(rename_all = "camelCase")]
218pub struct ProfileAssociatedChat {
219 pub allow_incoming: String,
220}
221
222#[derive(Debug, Clone, Serialize, Deserialize)]
223#[serde(rename_all = "camelCase")]
224pub struct ProfileAssociatedGerm {
225 pub message_me_url: String,
226 pub show_button_to: String,
227}
228
229#[derive(Debug, Clone, Serialize, Deserialize)]
230#[serde(rename_all = "camelCase")]
231pub struct ProfileView {
232 #[serde(skip_serializing_if = "Option::is_none")]
233 pub associated: Option<ProfileAssociated>,
234 #[serde(skip_serializing_if = "Option::is_none")]
235 pub avatar: Option<String>,
236 #[serde(skip_serializing_if = "Option::is_none")]
237 pub created_at: Option<proto_blue_syntax::Datetime>,
238 #[serde(skip_serializing_if = "Option::is_none")]
239 pub debug: Option<serde_json::Value>,
240 #[serde(skip_serializing_if = "Option::is_none")]
241 pub description: Option<String>,
242 pub did: proto_blue_syntax::Did,
243 #[serde(skip_serializing_if = "Option::is_none")]
244 pub display_name: Option<String>,
245 pub handle: proto_blue_syntax::Handle,
246 #[serde(skip_serializing_if = "Option::is_none")]
247 pub indexed_at: Option<proto_blue_syntax::Datetime>,
248 #[serde(skip_serializing_if = "Option::is_none")]
249 pub labels: Option<Vec<crate::com::atproto::label::defs::Label>>,
250 #[serde(skip_serializing_if = "Option::is_none")]
251 pub pronouns: Option<String>,
252 #[serde(skip_serializing_if = "Option::is_none")]
253 pub status: Option<StatusView>,
254 #[serde(skip_serializing_if = "Option::is_none")]
255 pub verification: Option<VerificationState>,
256 #[serde(skip_serializing_if = "Option::is_none")]
257 pub viewer: Option<ViewerState>,
258}
259
260#[derive(Debug, Clone, Serialize, Deserialize)]
261#[serde(rename_all = "camelCase")]
262pub struct ProfileViewBasic {
263 #[serde(skip_serializing_if = "Option::is_none")]
264 pub associated: Option<ProfileAssociated>,
265 #[serde(skip_serializing_if = "Option::is_none")]
266 pub avatar: Option<String>,
267 #[serde(skip_serializing_if = "Option::is_none")]
268 pub created_at: Option<proto_blue_syntax::Datetime>,
269 #[serde(skip_serializing_if = "Option::is_none")]
270 pub debug: Option<serde_json::Value>,
271 pub did: proto_blue_syntax::Did,
272 #[serde(skip_serializing_if = "Option::is_none")]
273 pub display_name: Option<String>,
274 pub handle: proto_blue_syntax::Handle,
275 #[serde(skip_serializing_if = "Option::is_none")]
276 pub labels: Option<Vec<crate::com::atproto::label::defs::Label>>,
277 #[serde(skip_serializing_if = "Option::is_none")]
278 pub pronouns: Option<String>,
279 #[serde(skip_serializing_if = "Option::is_none")]
280 pub status: Option<StatusView>,
281 #[serde(skip_serializing_if = "Option::is_none")]
282 pub verification: Option<VerificationState>,
283 #[serde(skip_serializing_if = "Option::is_none")]
284 pub viewer: Option<ViewerState>,
285}
286
287#[derive(Debug, Clone, Serialize, Deserialize)]
288#[serde(rename_all = "camelCase")]
289pub struct ProfileViewDetailed {
290 #[serde(skip_serializing_if = "Option::is_none")]
291 pub associated: Option<ProfileAssociated>,
292 #[serde(skip_serializing_if = "Option::is_none")]
293 pub avatar: Option<String>,
294 #[serde(skip_serializing_if = "Option::is_none")]
295 pub banner: Option<String>,
296 #[serde(skip_serializing_if = "Option::is_none")]
297 pub created_at: Option<proto_blue_syntax::Datetime>,
298 #[serde(skip_serializing_if = "Option::is_none")]
299 pub debug: Option<serde_json::Value>,
300 #[serde(skip_serializing_if = "Option::is_none")]
301 pub description: Option<String>,
302 pub did: proto_blue_syntax::Did,
303 #[serde(skip_serializing_if = "Option::is_none")]
304 pub display_name: Option<String>,
305 #[serde(skip_serializing_if = "Option::is_none")]
306 pub followers_count: Option<i64>,
307 #[serde(skip_serializing_if = "Option::is_none")]
308 pub follows_count: Option<i64>,
309 pub handle: proto_blue_syntax::Handle,
310 #[serde(skip_serializing_if = "Option::is_none")]
311 pub indexed_at: Option<proto_blue_syntax::Datetime>,
312 #[serde(skip_serializing_if = "Option::is_none")]
313 pub joined_via_starter_pack: Option<crate::app::bsky::graph::defs::StarterPackViewBasic>,
314 #[serde(skip_serializing_if = "Option::is_none")]
315 pub labels: Option<Vec<crate::com::atproto::label::defs::Label>>,
316 #[serde(skip_serializing_if = "Option::is_none")]
317 pub pinned_post: Option<crate::com::atproto::repo::strong_ref::Main>,
318 #[serde(skip_serializing_if = "Option::is_none")]
319 pub posts_count: Option<i64>,
320 #[serde(skip_serializing_if = "Option::is_none")]
321 pub pronouns: Option<String>,
322 #[serde(skip_serializing_if = "Option::is_none")]
323 pub status: Option<StatusView>,
324 #[serde(skip_serializing_if = "Option::is_none")]
325 pub verification: Option<VerificationState>,
326 #[serde(skip_serializing_if = "Option::is_none")]
327 pub viewer: Option<ViewerState>,
328 #[serde(skip_serializing_if = "Option::is_none")]
329 pub website: Option<String>,
330}
331
332#[derive(Debug, Clone, Serialize, Deserialize)]
333#[serde(rename_all = "camelCase")]
334pub struct SavedFeed {
335 pub id: String,
336 pub pinned: bool,
337 #[serde(rename = "type")]
338 pub r#type: String,
339 pub value: String,
340}
341
342#[derive(Debug, Clone, Serialize, Deserialize)]
343#[serde(rename_all = "camelCase")]
344pub struct SavedFeedsPref {
345 pub pinned: Vec<proto_blue_syntax::AtUri>,
346 pub saved: Vec<proto_blue_syntax::AtUri>,
347 #[serde(skip_serializing_if = "Option::is_none")]
348 pub timeline_index: Option<i64>,
349}
350
351#[derive(Debug, Clone, Serialize, Deserialize)]
352#[serde(rename_all = "camelCase")]
353pub struct SavedFeedsPrefV2 {
354 pub items: Vec<SavedFeed>,
355}
356
357#[derive(Debug, Clone, Serialize, Deserialize)]
359#[serde(tag = "$type")]
360pub enum StatusViewEmbedRefs {
361 #[serde(rename = "app.bsky.embed.external#view")]
362 BskyEmbedExternalView(Box<crate::app::bsky::embed::external::View>),
363 #[serde(other)]
364 Other,
365}
366
367#[derive(Debug, Clone, Serialize, Deserialize)]
368#[serde(rename_all = "camelCase")]
369pub struct StatusView {
370 #[serde(skip_serializing_if = "Option::is_none")]
371 pub cid: Option<String>,
372 #[serde(skip_serializing_if = "Option::is_none")]
373 pub embed: Option<StatusViewEmbedRefs>,
374 #[serde(skip_serializing_if = "Option::is_none")]
375 pub expires_at: Option<proto_blue_syntax::Datetime>,
376 #[serde(skip_serializing_if = "Option::is_none")]
377 pub is_active: Option<bool>,
378 #[serde(skip_serializing_if = "Option::is_none")]
379 pub is_disabled: Option<bool>,
380 pub record: serde_json::Value,
381 pub status: String,
382 #[serde(skip_serializing_if = "Option::is_none")]
383 pub uri: Option<proto_blue_syntax::AtUri>,
384}
385
386#[derive(Debug, Clone, Serialize, Deserialize)]
387#[serde(rename_all = "camelCase")]
388pub struct ThreadViewPref {
389 #[serde(skip_serializing_if = "Option::is_none")]
390 pub sort: Option<String>,
391}
392
393#[derive(Debug, Clone, Serialize, Deserialize)]
395#[serde(rename_all = "camelCase")]
396pub struct VerificationPrefs {
397 #[serde(skip_serializing_if = "Option::is_none")]
398 pub hide_badges: Option<bool>,
399}
400
401#[derive(Debug, Clone, Serialize, Deserialize)]
403#[serde(rename_all = "camelCase")]
404pub struct VerificationState {
405 pub trusted_verifier_status: String,
406 pub verifications: Vec<VerificationView>,
407 pub verified_status: String,
408}
409
410#[derive(Debug, Clone, Serialize, Deserialize)]
412#[serde(rename_all = "camelCase")]
413pub struct VerificationView {
414 pub created_at: proto_blue_syntax::Datetime,
415 pub is_valid: bool,
416 pub issuer: proto_blue_syntax::Did,
417 pub uri: proto_blue_syntax::AtUri,
418}
419
420#[derive(Debug, Clone, Serialize, Deserialize)]
422#[serde(rename_all = "camelCase")]
423pub struct ViewerState {
424 #[serde(skip_serializing_if = "Option::is_none")]
425 pub activity_subscription: Option<crate::app::bsky::notification::defs::ActivitySubscription>,
426 #[serde(skip_serializing_if = "Option::is_none")]
427 pub blocked_by: Option<bool>,
428 #[serde(skip_serializing_if = "Option::is_none")]
429 pub blocking: Option<proto_blue_syntax::AtUri>,
430 #[serde(skip_serializing_if = "Option::is_none")]
431 pub blocking_by_list: Option<crate::app::bsky::graph::defs::ListViewBasic>,
432 #[serde(skip_serializing_if = "Option::is_none")]
433 pub followed_by: Option<proto_blue_syntax::AtUri>,
434 #[serde(skip_serializing_if = "Option::is_none")]
435 pub following: Option<proto_blue_syntax::AtUri>,
436 #[serde(skip_serializing_if = "Option::is_none")]
437 pub known_followers: Option<KnownFollowers>,
438 #[serde(skip_serializing_if = "Option::is_none")]
439 pub muted: Option<bool>,
440 #[serde(skip_serializing_if = "Option::is_none")]
441 pub muted_by_list: Option<crate::app::bsky::graph::defs::ListViewBasic>,
442}