1use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct AccountEvent {
10 pub active: bool,
11 #[serde(skip_serializing_if = "Option::is_none")]
12 pub comment: Option<String>,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub status: Option<String>,
15 pub timestamp: proto_blue_syntax::Datetime,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
19#[serde(rename_all = "camelCase")]
20pub struct AccountHosting {
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub created_at: Option<proto_blue_syntax::Datetime>,
23 #[serde(skip_serializing_if = "Option::is_none")]
24 pub deactivated_at: Option<proto_blue_syntax::Datetime>,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub deleted_at: Option<proto_blue_syntax::Datetime>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub reactivated_at: Option<proto_blue_syntax::Datetime>,
29 pub status: String,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub updated_at: Option<proto_blue_syntax::Datetime>,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
36#[serde(rename_all = "camelCase")]
37pub struct AccountStats {
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub appeal_count: Option<i64>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub escalate_count: Option<i64>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub report_count: Option<i64>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub suspend_count: Option<i64>,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub takedown_count: Option<i64>,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
52#[serde(rename_all = "camelCase")]
53pub struct AccountStrike {
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub active_strike_count: Option<i64>,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub first_strike_at: Option<proto_blue_syntax::Datetime>,
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub last_strike_at: Option<proto_blue_syntax::Datetime>,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub total_strike_count: Option<i64>,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
66#[serde(rename_all = "camelCase")]
67pub struct AgeAssuranceEvent {
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub access: Option<crate::app::bsky::ageassurance::defs::Access>,
70 pub attempt_id: String,
71 #[serde(skip_serializing_if = "Option::is_none")]
72 pub complete_ip: Option<String>,
73 #[serde(skip_serializing_if = "Option::is_none")]
74 pub complete_ua: Option<String>,
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub country_code: Option<String>,
77 pub created_at: proto_blue_syntax::Datetime,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub init_ip: Option<String>,
80 #[serde(skip_serializing_if = "Option::is_none")]
81 pub init_ua: Option<String>,
82 #[serde(skip_serializing_if = "Option::is_none")]
83 pub region_code: Option<String>,
84 pub status: String,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize)]
89#[serde(rename_all = "camelCase")]
90pub struct AgeAssuranceOverrideEvent {
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub access: Option<crate::app::bsky::ageassurance::defs::Access>,
93 pub comment: String,
94 pub status: String,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize)]
98#[serde(tag = "$type")]
99pub enum BlobViewDetailsRefs {
100 #[serde(rename = "tools.ozone.moderation.defs#imageDetails")]
101 OzoneModerationDefsImageDetails(Box<ImageDetails>),
102 #[serde(rename = "tools.ozone.moderation.defs#videoDetails")]
103 OzoneModerationDefsVideoDetails(Box<VideoDetails>),
104 #[serde(other)]
105 Other,
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize)]
109#[serde(rename_all = "camelCase")]
110pub struct BlobView {
111 pub cid: String,
112 pub created_at: proto_blue_syntax::Datetime,
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub details: Option<BlobViewDetailsRefs>,
115 pub mime_type: String,
116 #[serde(skip_serializing_if = "Option::is_none")]
117 pub moderation: Option<Moderation>,
118 pub size: i64,
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize)]
123#[serde(rename_all = "camelCase")]
124pub struct CancelScheduledTakedownEvent {
125 #[serde(skip_serializing_if = "Option::is_none")]
126 pub comment: Option<String>,
127}
128
129#[derive(Debug, Clone, Serialize, Deserialize)]
131#[serde(rename_all = "camelCase")]
132pub struct IdentityEvent {
133 #[serde(skip_serializing_if = "Option::is_none")]
134 pub comment: Option<String>,
135 #[serde(skip_serializing_if = "Option::is_none")]
136 pub handle: Option<proto_blue_syntax::Handle>,
137 #[serde(skip_serializing_if = "Option::is_none")]
138 pub pds_host: Option<String>,
139 pub timestamp: proto_blue_syntax::Datetime,
140 #[serde(skip_serializing_if = "Option::is_none")]
141 pub tombstone: Option<bool>,
142}
143
144#[derive(Debug, Clone, Serialize, Deserialize)]
145#[serde(rename_all = "camelCase")]
146pub struct ImageDetails {
147 pub height: i64,
148 pub width: i64,
149}
150
151#[derive(Debug, Clone, Serialize, Deserialize)]
152#[serde(rename_all = "camelCase")]
153pub struct ModEventAcknowledge {
154 #[serde(skip_serializing_if = "Option::is_none")]
155 pub acknowledge_account_subjects: Option<bool>,
156 #[serde(skip_serializing_if = "Option::is_none")]
157 pub comment: Option<String>,
158}
159
160#[derive(Debug, Clone, Serialize, Deserialize)]
162#[serde(rename_all = "camelCase")]
163pub struct ModEventComment {
164 #[serde(skip_serializing_if = "Option::is_none")]
165 pub comment: Option<String>,
166 #[serde(skip_serializing_if = "Option::is_none")]
167 pub sticky: Option<bool>,
168}
169
170#[derive(Debug, Clone, Serialize, Deserialize)]
172#[serde(rename_all = "camelCase")]
173pub struct ModEventDivert {
174 #[serde(skip_serializing_if = "Option::is_none")]
175 pub comment: Option<String>,
176}
177
178#[derive(Debug, Clone, Serialize, Deserialize)]
180#[serde(rename_all = "camelCase")]
181pub struct ModEventEmail {
182 #[serde(skip_serializing_if = "Option::is_none")]
183 pub comment: Option<String>,
184 #[serde(skip_serializing_if = "Option::is_none")]
185 pub content: Option<String>,
186 #[serde(skip_serializing_if = "Option::is_none")]
187 pub is_delivered: Option<bool>,
188 #[serde(skip_serializing_if = "Option::is_none")]
189 pub policies: Option<Vec<String>>,
190 #[serde(skip_serializing_if = "Option::is_none")]
191 pub severity_level: Option<String>,
192 #[serde(skip_serializing_if = "Option::is_none")]
193 pub strike_count: Option<i64>,
194 #[serde(skip_serializing_if = "Option::is_none")]
195 pub strike_expires_at: Option<proto_blue_syntax::Datetime>,
196 pub subject_line: String,
197}
198
199#[derive(Debug, Clone, Serialize, Deserialize)]
200#[serde(rename_all = "camelCase")]
201pub struct ModEventEscalate {
202 #[serde(skip_serializing_if = "Option::is_none")]
203 pub comment: Option<String>,
204}
205
206#[derive(Debug, Clone, Serialize, Deserialize)]
208#[serde(rename_all = "camelCase")]
209pub struct ModEventLabel {
210 #[serde(skip_serializing_if = "Option::is_none")]
211 pub comment: Option<String>,
212 pub create_label_vals: Vec<String>,
213 #[serde(skip_serializing_if = "Option::is_none")]
214 pub duration_in_hours: Option<i64>,
215 pub negate_label_vals: Vec<String>,
216}
217
218#[derive(Debug, Clone, Serialize, Deserialize)]
220#[serde(rename_all = "camelCase")]
221pub struct ModEventMute {
222 #[serde(skip_serializing_if = "Option::is_none")]
223 pub comment: Option<String>,
224 pub duration_in_hours: i64,
225}
226
227#[derive(Debug, Clone, Serialize, Deserialize)]
229#[serde(rename_all = "camelCase")]
230pub struct ModEventMuteReporter {
231 #[serde(skip_serializing_if = "Option::is_none")]
232 pub comment: Option<String>,
233 #[serde(skip_serializing_if = "Option::is_none")]
234 pub duration_in_hours: Option<i64>,
235}
236
237#[derive(Debug, Clone, Serialize, Deserialize)]
239#[serde(rename_all = "camelCase")]
240pub struct ModEventPriorityScore {
241 #[serde(skip_serializing_if = "Option::is_none")]
242 pub comment: Option<String>,
243 pub score: i64,
244}
245
246#[derive(Debug, Clone, Serialize, Deserialize)]
248#[serde(rename_all = "camelCase")]
249pub struct ModEventReport {
250 #[serde(skip_serializing_if = "Option::is_none")]
251 pub comment: Option<String>,
252 #[serde(skip_serializing_if = "Option::is_none")]
253 pub is_reporter_muted: Option<bool>,
254 pub report_type: crate::com::atproto::moderation::defs::ReasonType,
255}
256
257#[derive(Debug, Clone, Serialize, Deserialize)]
259#[serde(rename_all = "camelCase")]
260pub struct ModEventResolveAppeal {
261 #[serde(skip_serializing_if = "Option::is_none")]
262 pub comment: Option<String>,
263}
264
265#[derive(Debug, Clone, Serialize, Deserialize)]
267#[serde(rename_all = "camelCase")]
268pub struct ModEventReverseTakedown {
269 #[serde(skip_serializing_if = "Option::is_none")]
270 pub comment: Option<String>,
271 #[serde(skip_serializing_if = "Option::is_none")]
272 pub policies: Option<Vec<String>>,
273 #[serde(skip_serializing_if = "Option::is_none")]
274 pub severity_level: Option<String>,
275 #[serde(skip_serializing_if = "Option::is_none")]
276 pub strike_count: Option<i64>,
277}
278
279#[derive(Debug, Clone, Serialize, Deserialize)]
281#[serde(rename_all = "camelCase")]
282pub struct ModEventTag {
283 pub add: Vec<String>,
284 #[serde(skip_serializing_if = "Option::is_none")]
285 pub comment: Option<String>,
286 pub remove: Vec<String>,
287}
288
289#[derive(Debug, Clone, Serialize, Deserialize)]
291#[serde(rename_all = "camelCase")]
292pub struct ModEventTakedown {
293 #[serde(skip_serializing_if = "Option::is_none")]
294 pub acknowledge_account_subjects: Option<bool>,
295 #[serde(skip_serializing_if = "Option::is_none")]
296 pub comment: Option<String>,
297 #[serde(skip_serializing_if = "Option::is_none")]
298 pub duration_in_hours: Option<i64>,
299 #[serde(skip_serializing_if = "Option::is_none")]
300 pub policies: Option<Vec<String>>,
301 #[serde(skip_serializing_if = "Option::is_none")]
302 pub severity_level: Option<String>,
303 #[serde(skip_serializing_if = "Option::is_none")]
304 pub strike_count: Option<i64>,
305 #[serde(skip_serializing_if = "Option::is_none")]
306 pub strike_expires_at: Option<proto_blue_syntax::Datetime>,
307 #[serde(skip_serializing_if = "Option::is_none")]
308 pub target_services: Option<Vec<String>>,
309}
310
311#[derive(Debug, Clone, Serialize, Deserialize)]
313#[serde(rename_all = "camelCase")]
314pub struct ModEventUnmute {
315 #[serde(skip_serializing_if = "Option::is_none")]
316 pub comment: Option<String>,
317}
318
319#[derive(Debug, Clone, Serialize, Deserialize)]
321#[serde(rename_all = "camelCase")]
322pub struct ModEventUnmuteReporter {
323 #[serde(skip_serializing_if = "Option::is_none")]
324 pub comment: Option<String>,
325}
326
327#[derive(Debug, Clone, Serialize, Deserialize)]
328#[serde(tag = "$type")]
329pub enum ModEventViewEventRefs {
330 #[serde(rename = "tools.ozone.moderation.defs#modEventTakedown")]
331 OzoneModerationDefsModEventTakedown(Box<ModEventTakedown>),
332 #[serde(rename = "tools.ozone.moderation.defs#modEventReverseTakedown")]
333 OzoneModerationDefsModEventReverseTakedown(Box<ModEventReverseTakedown>),
334 #[serde(rename = "tools.ozone.moderation.defs#modEventComment")]
335 OzoneModerationDefsModEventComment(Box<ModEventComment>),
336 #[serde(rename = "tools.ozone.moderation.defs#modEventReport")]
337 OzoneModerationDefsModEventReport(Box<ModEventReport>),
338 #[serde(rename = "tools.ozone.moderation.defs#modEventLabel")]
339 OzoneModerationDefsModEventLabel(Box<ModEventLabel>),
340 #[serde(rename = "tools.ozone.moderation.defs#modEventAcknowledge")]
341 OzoneModerationDefsModEventAcknowledge(Box<ModEventAcknowledge>),
342 #[serde(rename = "tools.ozone.moderation.defs#modEventEscalate")]
343 OzoneModerationDefsModEventEscalate(Box<ModEventEscalate>),
344 #[serde(rename = "tools.ozone.moderation.defs#modEventMute")]
345 OzoneModerationDefsModEventMute(Box<ModEventMute>),
346 #[serde(rename = "tools.ozone.moderation.defs#modEventUnmute")]
347 OzoneModerationDefsModEventUnmute(Box<ModEventUnmute>),
348 #[serde(rename = "tools.ozone.moderation.defs#modEventMuteReporter")]
349 OzoneModerationDefsModEventMuteReporter(Box<ModEventMuteReporter>),
350 #[serde(rename = "tools.ozone.moderation.defs#modEventUnmuteReporter")]
351 OzoneModerationDefsModEventUnmuteReporter(Box<ModEventUnmuteReporter>),
352 #[serde(rename = "tools.ozone.moderation.defs#modEventEmail")]
353 OzoneModerationDefsModEventEmail(Box<ModEventEmail>),
354 #[serde(rename = "tools.ozone.moderation.defs#modEventResolveAppeal")]
355 OzoneModerationDefsModEventResolveAppeal(Box<ModEventResolveAppeal>),
356 #[serde(rename = "tools.ozone.moderation.defs#modEventDivert")]
357 OzoneModerationDefsModEventDivert(Box<ModEventDivert>),
358 #[serde(rename = "tools.ozone.moderation.defs#modEventTag")]
359 OzoneModerationDefsModEventTag(Box<ModEventTag>),
360 #[serde(rename = "tools.ozone.moderation.defs#accountEvent")]
361 OzoneModerationDefsAccountEvent(Box<AccountEvent>),
362 #[serde(rename = "tools.ozone.moderation.defs#identityEvent")]
363 OzoneModerationDefsIdentityEvent(Box<IdentityEvent>),
364 #[serde(rename = "tools.ozone.moderation.defs#recordEvent")]
365 OzoneModerationDefsRecordEvent(Box<RecordEvent>),
366 #[serde(rename = "tools.ozone.moderation.defs#modEventPriorityScore")]
367 OzoneModerationDefsModEventPriorityScore(Box<ModEventPriorityScore>),
368 #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceEvent")]
369 OzoneModerationDefsAgeAssuranceEvent(Box<AgeAssuranceEvent>),
370 #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceOverrideEvent")]
371 OzoneModerationDefsAgeAssuranceOverrideEvent(Box<AgeAssuranceOverrideEvent>),
372 #[serde(rename = "tools.ozone.moderation.defs#revokeAccountCredentialsEvent")]
373 OzoneModerationDefsRevokeAccountCredentialsEvent(Box<RevokeAccountCredentialsEvent>),
374 #[serde(rename = "tools.ozone.moderation.defs#scheduleTakedownEvent")]
375 OzoneModerationDefsScheduleTakedownEvent(Box<ScheduleTakedownEvent>),
376 #[serde(rename = "tools.ozone.moderation.defs#cancelScheduledTakedownEvent")]
377 OzoneModerationDefsCancelScheduledTakedownEvent(Box<CancelScheduledTakedownEvent>),
378 #[serde(other)]
379 Other,
380}
381
382#[derive(Debug, Clone, Serialize, Deserialize)]
383#[serde(tag = "$type")]
384pub enum ModEventViewSubjectRefs {
385 #[serde(rename = "com.atproto.admin.defs#repoRef")]
386 AtprotoAdminDefsRepoRef(Box<crate::com::atproto::admin::defs::RepoRef>),
387 #[serde(rename = "com.atproto.repo.strongRef")]
388 AtprotoRepoStrongRef(Box<crate::com::atproto::repo::strong_ref::Main>),
389 #[serde(rename = "chat.bsky.convo.defs#messageRef")]
390 BskyConvoDefsMessageRef(Box<crate::chat::bsky::convo::defs::MessageRef>),
391 #[serde(other)]
392 Other,
393}
394
395#[derive(Debug, Clone, Serialize, Deserialize)]
396#[serde(rename_all = "camelCase")]
397pub struct ModEventView {
398 pub created_at: proto_blue_syntax::Datetime,
399 pub created_by: proto_blue_syntax::Did,
400 #[serde(skip_serializing_if = "Option::is_none")]
401 pub creator_handle: Option<String>,
402 pub event: ModEventViewEventRefs,
403 pub id: i64,
404 #[serde(skip_serializing_if = "Option::is_none")]
405 pub mod_tool: Option<ModTool>,
406 pub subject: ModEventViewSubjectRefs,
407 pub subject_blob_cids: Vec<String>,
408 #[serde(skip_serializing_if = "Option::is_none")]
409 pub subject_handle: Option<String>,
410}
411
412#[derive(Debug, Clone, Serialize, Deserialize)]
413#[serde(tag = "$type")]
414pub enum ModEventViewDetailEventRefs {
415 #[serde(rename = "tools.ozone.moderation.defs#modEventTakedown")]
416 OzoneModerationDefsModEventTakedown(Box<ModEventTakedown>),
417 #[serde(rename = "tools.ozone.moderation.defs#modEventReverseTakedown")]
418 OzoneModerationDefsModEventReverseTakedown(Box<ModEventReverseTakedown>),
419 #[serde(rename = "tools.ozone.moderation.defs#modEventComment")]
420 OzoneModerationDefsModEventComment(Box<ModEventComment>),
421 #[serde(rename = "tools.ozone.moderation.defs#modEventReport")]
422 OzoneModerationDefsModEventReport(Box<ModEventReport>),
423 #[serde(rename = "tools.ozone.moderation.defs#modEventLabel")]
424 OzoneModerationDefsModEventLabel(Box<ModEventLabel>),
425 #[serde(rename = "tools.ozone.moderation.defs#modEventAcknowledge")]
426 OzoneModerationDefsModEventAcknowledge(Box<ModEventAcknowledge>),
427 #[serde(rename = "tools.ozone.moderation.defs#modEventEscalate")]
428 OzoneModerationDefsModEventEscalate(Box<ModEventEscalate>),
429 #[serde(rename = "tools.ozone.moderation.defs#modEventMute")]
430 OzoneModerationDefsModEventMute(Box<ModEventMute>),
431 #[serde(rename = "tools.ozone.moderation.defs#modEventUnmute")]
432 OzoneModerationDefsModEventUnmute(Box<ModEventUnmute>),
433 #[serde(rename = "tools.ozone.moderation.defs#modEventMuteReporter")]
434 OzoneModerationDefsModEventMuteReporter(Box<ModEventMuteReporter>),
435 #[serde(rename = "tools.ozone.moderation.defs#modEventUnmuteReporter")]
436 OzoneModerationDefsModEventUnmuteReporter(Box<ModEventUnmuteReporter>),
437 #[serde(rename = "tools.ozone.moderation.defs#modEventEmail")]
438 OzoneModerationDefsModEventEmail(Box<ModEventEmail>),
439 #[serde(rename = "tools.ozone.moderation.defs#modEventResolveAppeal")]
440 OzoneModerationDefsModEventResolveAppeal(Box<ModEventResolveAppeal>),
441 #[serde(rename = "tools.ozone.moderation.defs#modEventDivert")]
442 OzoneModerationDefsModEventDivert(Box<ModEventDivert>),
443 #[serde(rename = "tools.ozone.moderation.defs#modEventTag")]
444 OzoneModerationDefsModEventTag(Box<ModEventTag>),
445 #[serde(rename = "tools.ozone.moderation.defs#accountEvent")]
446 OzoneModerationDefsAccountEvent(Box<AccountEvent>),
447 #[serde(rename = "tools.ozone.moderation.defs#identityEvent")]
448 OzoneModerationDefsIdentityEvent(Box<IdentityEvent>),
449 #[serde(rename = "tools.ozone.moderation.defs#recordEvent")]
450 OzoneModerationDefsRecordEvent(Box<RecordEvent>),
451 #[serde(rename = "tools.ozone.moderation.defs#modEventPriorityScore")]
452 OzoneModerationDefsModEventPriorityScore(Box<ModEventPriorityScore>),
453 #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceEvent")]
454 OzoneModerationDefsAgeAssuranceEvent(Box<AgeAssuranceEvent>),
455 #[serde(rename = "tools.ozone.moderation.defs#ageAssuranceOverrideEvent")]
456 OzoneModerationDefsAgeAssuranceOverrideEvent(Box<AgeAssuranceOverrideEvent>),
457 #[serde(rename = "tools.ozone.moderation.defs#revokeAccountCredentialsEvent")]
458 OzoneModerationDefsRevokeAccountCredentialsEvent(Box<RevokeAccountCredentialsEvent>),
459 #[serde(rename = "tools.ozone.moderation.defs#scheduleTakedownEvent")]
460 OzoneModerationDefsScheduleTakedownEvent(Box<ScheduleTakedownEvent>),
461 #[serde(rename = "tools.ozone.moderation.defs#cancelScheduledTakedownEvent")]
462 OzoneModerationDefsCancelScheduledTakedownEvent(Box<CancelScheduledTakedownEvent>),
463 #[serde(other)]
464 Other,
465}
466
467#[derive(Debug, Clone, Serialize, Deserialize)]
468#[serde(tag = "$type")]
469pub enum ModEventViewDetailSubjectRefs {
470 #[serde(rename = "tools.ozone.moderation.defs#repoView")]
471 OzoneModerationDefsRepoView(Box<RepoView>),
472 #[serde(rename = "tools.ozone.moderation.defs#repoViewNotFound")]
473 OzoneModerationDefsRepoViewNotFound(Box<RepoViewNotFound>),
474 #[serde(rename = "tools.ozone.moderation.defs#recordView")]
475 OzoneModerationDefsRecordView(Box<RecordView>),
476 #[serde(rename = "tools.ozone.moderation.defs#recordViewNotFound")]
477 OzoneModerationDefsRecordViewNotFound(Box<RecordViewNotFound>),
478 #[serde(other)]
479 Other,
480}
481
482#[derive(Debug, Clone, Serialize, Deserialize)]
483#[serde(rename_all = "camelCase")]
484pub struct ModEventViewDetail {
485 pub created_at: proto_blue_syntax::Datetime,
486 pub created_by: proto_blue_syntax::Did,
487 pub event: ModEventViewDetailEventRefs,
488 pub id: i64,
489 #[serde(skip_serializing_if = "Option::is_none")]
490 pub mod_tool: Option<ModTool>,
491 pub subject: ModEventViewDetailSubjectRefs,
492 pub subject_blobs: Vec<BlobView>,
493}
494
495#[derive(Debug, Clone, Serialize, Deserialize)]
497#[serde(rename_all = "camelCase")]
498pub struct ModTool {
499 #[serde(skip_serializing_if = "Option::is_none")]
500 pub meta: Option<serde_json::Value>,
501 pub name: String,
502}
503
504#[derive(Debug, Clone, Serialize, Deserialize)]
505#[serde(rename_all = "camelCase")]
506pub struct Moderation {
507 #[serde(skip_serializing_if = "Option::is_none")]
508 pub subject_status: Option<SubjectStatusView>,
509}
510
511#[derive(Debug, Clone, Serialize, Deserialize)]
512#[serde(rename_all = "camelCase")]
513pub struct ModerationDetail {
514 #[serde(skip_serializing_if = "Option::is_none")]
515 pub subject_status: Option<SubjectStatusView>,
516}
517
518#[derive(Debug, Clone, Serialize, Deserialize)]
520#[serde(rename_all = "camelCase")]
521pub struct RecordEvent {
522 #[serde(skip_serializing_if = "Option::is_none")]
523 pub cid: Option<String>,
524 #[serde(skip_serializing_if = "Option::is_none")]
525 pub comment: Option<String>,
526 pub op: String,
527 pub timestamp: proto_blue_syntax::Datetime,
528}
529
530#[derive(Debug, Clone, Serialize, Deserialize)]
531#[serde(rename_all = "camelCase")]
532pub struct RecordHosting {
533 #[serde(skip_serializing_if = "Option::is_none")]
534 pub created_at: Option<proto_blue_syntax::Datetime>,
535 #[serde(skip_serializing_if = "Option::is_none")]
536 pub deleted_at: Option<proto_blue_syntax::Datetime>,
537 pub status: String,
538 #[serde(skip_serializing_if = "Option::is_none")]
539 pub updated_at: Option<proto_blue_syntax::Datetime>,
540}
541
542#[derive(Debug, Clone, Serialize, Deserialize)]
543#[serde(rename_all = "camelCase")]
544pub struct RecordView {
545 pub blob_cids: Vec<String>,
546 pub cid: String,
547 pub indexed_at: proto_blue_syntax::Datetime,
548 pub moderation: Moderation,
549 pub repo: RepoView,
550 pub uri: proto_blue_syntax::AtUri,
551 pub value: serde_json::Value,
552}
553
554#[derive(Debug, Clone, Serialize, Deserialize)]
555#[serde(rename_all = "camelCase")]
556pub struct RecordViewDetail {
557 pub blobs: Vec<BlobView>,
558 pub cid: String,
559 pub indexed_at: proto_blue_syntax::Datetime,
560 #[serde(skip_serializing_if = "Option::is_none")]
561 pub labels: Option<Vec<crate::com::atproto::label::defs::Label>>,
562 pub moderation: ModerationDetail,
563 pub repo: RepoView,
564 pub uri: proto_blue_syntax::AtUri,
565 pub value: serde_json::Value,
566}
567
568#[derive(Debug, Clone, Serialize, Deserialize)]
569#[serde(rename_all = "camelCase")]
570pub struct RecordViewNotFound {
571 pub uri: proto_blue_syntax::AtUri,
572}
573
574#[derive(Debug, Clone, Serialize, Deserialize)]
576#[serde(rename_all = "camelCase")]
577pub struct RecordsStats {
578 #[serde(skip_serializing_if = "Option::is_none")]
579 pub appealed_count: Option<i64>,
580 #[serde(skip_serializing_if = "Option::is_none")]
581 pub escalated_count: Option<i64>,
582 #[serde(skip_serializing_if = "Option::is_none")]
583 pub pending_count: Option<i64>,
584 #[serde(skip_serializing_if = "Option::is_none")]
585 pub processed_count: Option<i64>,
586 #[serde(skip_serializing_if = "Option::is_none")]
587 pub reported_count: Option<i64>,
588 #[serde(skip_serializing_if = "Option::is_none")]
589 pub subject_count: Option<i64>,
590 #[serde(skip_serializing_if = "Option::is_none")]
591 pub takendown_count: Option<i64>,
592 #[serde(skip_serializing_if = "Option::is_none")]
593 pub total_reports: Option<i64>,
594}
595
596#[derive(Debug, Clone, Serialize, Deserialize)]
597#[serde(rename_all = "camelCase")]
598pub struct RepoView {
599 #[serde(skip_serializing_if = "Option::is_none")]
600 pub deactivated_at: Option<proto_blue_syntax::Datetime>,
601 pub did: proto_blue_syntax::Did,
602 #[serde(skip_serializing_if = "Option::is_none")]
603 pub email: Option<String>,
604 pub handle: proto_blue_syntax::Handle,
605 pub indexed_at: proto_blue_syntax::Datetime,
606 #[serde(skip_serializing_if = "Option::is_none")]
607 pub invite_note: Option<String>,
608 #[serde(skip_serializing_if = "Option::is_none")]
609 pub invited_by: Option<crate::com::atproto::server::defs::InviteCode>,
610 #[serde(skip_serializing_if = "Option::is_none")]
611 pub invites_disabled: Option<bool>,
612 pub moderation: Moderation,
613 pub related_records: Vec<serde_json::Value>,
614 #[serde(skip_serializing_if = "Option::is_none")]
615 pub threat_signatures: Option<Vec<crate::com::atproto::admin::defs::ThreatSignature>>,
616}
617
618#[derive(Debug, Clone, Serialize, Deserialize)]
619#[serde(rename_all = "camelCase")]
620pub struct RepoViewDetail {
621 #[serde(skip_serializing_if = "Option::is_none")]
622 pub deactivated_at: Option<proto_blue_syntax::Datetime>,
623 pub did: proto_blue_syntax::Did,
624 #[serde(skip_serializing_if = "Option::is_none")]
625 pub email: Option<String>,
626 #[serde(skip_serializing_if = "Option::is_none")]
627 pub email_confirmed_at: Option<proto_blue_syntax::Datetime>,
628 pub handle: proto_blue_syntax::Handle,
629 pub indexed_at: proto_blue_syntax::Datetime,
630 #[serde(skip_serializing_if = "Option::is_none")]
631 pub invite_note: Option<String>,
632 #[serde(skip_serializing_if = "Option::is_none")]
633 pub invited_by: Option<crate::com::atproto::server::defs::InviteCode>,
634 #[serde(skip_serializing_if = "Option::is_none")]
635 pub invites: Option<Vec<crate::com::atproto::server::defs::InviteCode>>,
636 #[serde(skip_serializing_if = "Option::is_none")]
637 pub invites_disabled: Option<bool>,
638 #[serde(skip_serializing_if = "Option::is_none")]
639 pub labels: Option<Vec<crate::com::atproto::label::defs::Label>>,
640 pub moderation: ModerationDetail,
641 pub related_records: Vec<serde_json::Value>,
642 #[serde(skip_serializing_if = "Option::is_none")]
643 pub threat_signatures: Option<Vec<crate::com::atproto::admin::defs::ThreatSignature>>,
644}
645
646#[derive(Debug, Clone, Serialize, Deserialize)]
647#[serde(rename_all = "camelCase")]
648pub struct RepoViewNotFound {
649 pub did: proto_blue_syntax::Did,
650}
651
652#[derive(Debug, Clone, Serialize, Deserialize)]
653#[serde(rename_all = "camelCase")]
654pub struct ReporterStats {
655 pub account_report_count: i64,
656 pub did: proto_blue_syntax::Did,
657 pub labeled_account_count: i64,
658 pub labeled_record_count: i64,
659 pub record_report_count: i64,
660 pub reported_account_count: i64,
661 pub reported_record_count: i64,
662 pub takendown_account_count: i64,
663 pub takendown_record_count: i64,
664}
665
666pub const REVIEW_CLOSED: &str = "tools.ozone.moderation.defs#reviewClosed";
668
669pub const REVIEW_ESCALATED: &str = "tools.ozone.moderation.defs#reviewEscalated";
671
672pub const REVIEW_NONE: &str = "tools.ozone.moderation.defs#reviewNone";
674
675pub const REVIEW_OPEN: &str = "tools.ozone.moderation.defs#reviewOpen";
677
678#[derive(Debug, Clone, Serialize, Deserialize)]
680#[serde(rename_all = "camelCase")]
681pub struct RevokeAccountCredentialsEvent {
682 pub comment: String,
683}
684
685#[derive(Debug, Clone, Serialize, Deserialize)]
687#[serde(rename_all = "camelCase")]
688pub struct ScheduleTakedownEvent {
689 #[serde(skip_serializing_if = "Option::is_none")]
690 pub comment: Option<String>,
691 #[serde(skip_serializing_if = "Option::is_none")]
692 pub execute_after: Option<proto_blue_syntax::Datetime>,
693 #[serde(skip_serializing_if = "Option::is_none")]
694 pub execute_at: Option<proto_blue_syntax::Datetime>,
695 #[serde(skip_serializing_if = "Option::is_none")]
696 pub execute_until: Option<proto_blue_syntax::Datetime>,
697}
698
699#[derive(Debug, Clone, Serialize, Deserialize)]
701#[serde(rename_all = "camelCase")]
702pub struct ScheduledActionView {
703 pub action: String,
704 pub created_at: proto_blue_syntax::Datetime,
705 pub created_by: proto_blue_syntax::Did,
706 pub did: proto_blue_syntax::Did,
707 #[serde(skip_serializing_if = "Option::is_none")]
708 pub event_data: Option<serde_json::Value>,
709 #[serde(skip_serializing_if = "Option::is_none")]
710 pub execute_after: Option<proto_blue_syntax::Datetime>,
711 #[serde(skip_serializing_if = "Option::is_none")]
712 pub execute_at: Option<proto_blue_syntax::Datetime>,
713 #[serde(skip_serializing_if = "Option::is_none")]
714 pub execute_until: Option<proto_blue_syntax::Datetime>,
715 #[serde(skip_serializing_if = "Option::is_none")]
716 pub execution_event_id: Option<i64>,
717 pub id: i64,
718 #[serde(skip_serializing_if = "Option::is_none")]
719 pub last_executed_at: Option<proto_blue_syntax::Datetime>,
720 #[serde(skip_serializing_if = "Option::is_none")]
721 pub last_failure_reason: Option<String>,
722 #[serde(skip_serializing_if = "Option::is_none")]
723 pub randomize_execution: Option<bool>,
724 pub status: String,
725 #[serde(skip_serializing_if = "Option::is_none")]
726 pub updated_at: Option<proto_blue_syntax::Datetime>,
727}
728
729pub type SubjectReviewState = String;
730pub const SUBJECT_REVIEW_STATE_REVIEW_OPEN: &str = "tools.ozone.moderation.defs#reviewOpen";
731pub const SUBJECT_REVIEW_STATE_REVIEW_ESCALATED: &str =
732 "tools.ozone.moderation.defs#reviewEscalated";
733pub const SUBJECT_REVIEW_STATE_REVIEW_CLOSED: &str = "tools.ozone.moderation.defs#reviewClosed";
734pub const SUBJECT_REVIEW_STATE_REVIEW_NONE: &str = "tools.ozone.moderation.defs#reviewNone";
735
736#[derive(Debug, Clone, Serialize, Deserialize)]
737#[serde(tag = "$type")]
738pub enum SubjectStatusViewHostingRefs {
739 #[serde(rename = "tools.ozone.moderation.defs#accountHosting")]
740 OzoneModerationDefsAccountHosting(Box<AccountHosting>),
741 #[serde(rename = "tools.ozone.moderation.defs#recordHosting")]
742 OzoneModerationDefsRecordHosting(Box<RecordHosting>),
743 #[serde(other)]
744 Other,
745}
746
747#[derive(Debug, Clone, Serialize, Deserialize)]
748#[serde(tag = "$type")]
749pub enum SubjectStatusViewSubjectRefs {
750 #[serde(rename = "com.atproto.admin.defs#repoRef")]
751 AtprotoAdminDefsRepoRef(Box<crate::com::atproto::admin::defs::RepoRef>),
752 #[serde(rename = "com.atproto.repo.strongRef")]
753 AtprotoRepoStrongRef(Box<crate::com::atproto::repo::strong_ref::Main>),
754 #[serde(rename = "chat.bsky.convo.defs#messageRef")]
755 BskyConvoDefsMessageRef(Box<crate::chat::bsky::convo::defs::MessageRef>),
756 #[serde(other)]
757 Other,
758}
759
760#[derive(Debug, Clone, Serialize, Deserialize)]
761#[serde(rename_all = "camelCase")]
762pub struct SubjectStatusView {
763 #[serde(skip_serializing_if = "Option::is_none")]
764 pub account_stats: Option<AccountStats>,
765 #[serde(skip_serializing_if = "Option::is_none")]
766 pub account_strike: Option<AccountStrike>,
767 #[serde(skip_serializing_if = "Option::is_none")]
768 pub age_assurance_state: Option<String>,
769 #[serde(skip_serializing_if = "Option::is_none")]
770 pub age_assurance_updated_by: Option<String>,
771 #[serde(skip_serializing_if = "Option::is_none")]
772 pub appealed: Option<bool>,
773 #[serde(skip_serializing_if = "Option::is_none")]
774 pub comment: Option<String>,
775 pub created_at: proto_blue_syntax::Datetime,
776 #[serde(skip_serializing_if = "Option::is_none")]
777 pub hosting: Option<SubjectStatusViewHostingRefs>,
778 pub id: i64,
779 #[serde(skip_serializing_if = "Option::is_none")]
780 pub last_appealed_at: Option<proto_blue_syntax::Datetime>,
781 #[serde(skip_serializing_if = "Option::is_none")]
782 pub last_reported_at: Option<proto_blue_syntax::Datetime>,
783 #[serde(skip_serializing_if = "Option::is_none")]
784 pub last_reviewed_at: Option<proto_blue_syntax::Datetime>,
785 #[serde(skip_serializing_if = "Option::is_none")]
786 pub last_reviewed_by: Option<proto_blue_syntax::Did>,
787 #[serde(skip_serializing_if = "Option::is_none")]
788 pub mute_reporting_until: Option<proto_blue_syntax::Datetime>,
789 #[serde(skip_serializing_if = "Option::is_none")]
790 pub mute_until: Option<proto_blue_syntax::Datetime>,
791 #[serde(skip_serializing_if = "Option::is_none")]
792 pub priority_score: Option<i64>,
793 #[serde(skip_serializing_if = "Option::is_none")]
794 pub records_stats: Option<RecordsStats>,
795 pub review_state: SubjectReviewState,
796 pub subject: SubjectStatusViewSubjectRefs,
797 #[serde(skip_serializing_if = "Option::is_none")]
798 pub subject_blob_cids: Option<Vec<String>>,
799 #[serde(skip_serializing_if = "Option::is_none")]
800 pub subject_repo_handle: Option<String>,
801 #[serde(skip_serializing_if = "Option::is_none")]
802 pub suspend_until: Option<proto_blue_syntax::Datetime>,
803 #[serde(skip_serializing_if = "Option::is_none")]
804 pub tags: Option<Vec<String>>,
805 #[serde(skip_serializing_if = "Option::is_none")]
806 pub takendown: Option<bool>,
807 pub updated_at: proto_blue_syntax::Datetime,
808}
809
810#[derive(Debug, Clone, Serialize, Deserialize)]
811#[serde(tag = "$type")]
812pub enum SubjectViewProfileRefs {
813 #[serde(other)]
814 Other,
815}
816
817#[derive(Debug, Clone, Serialize, Deserialize)]
819#[serde(rename_all = "camelCase")]
820pub struct SubjectView {
821 #[serde(skip_serializing_if = "Option::is_none")]
822 pub profile: Option<SubjectViewProfileRefs>,
823 #[serde(skip_serializing_if = "Option::is_none")]
824 pub record: Option<RecordViewDetail>,
825 #[serde(skip_serializing_if = "Option::is_none")]
826 pub repo: Option<RepoViewDetail>,
827 #[serde(skip_serializing_if = "Option::is_none")]
828 pub status: Option<SubjectStatusView>,
829 pub subject: String,
830 #[serde(rename = "type")]
831 pub r#type: crate::com::atproto::moderation::defs::SubjectType,
832}
833
834pub const TIMELINE_EVENT_PLC_CREATE: &str = "tools.ozone.moderation.defs#timelineEventPlcCreate";
836
837pub const TIMELINE_EVENT_PLC_OPERATION: &str =
839 "tools.ozone.moderation.defs#timelineEventPlcOperation";
840
841pub const TIMELINE_EVENT_PLC_TOMBSTONE: &str =
843 "tools.ozone.moderation.defs#timelineEventPlcTombstone";
844
845#[derive(Debug, Clone, Serialize, Deserialize)]
846#[serde(rename_all = "camelCase")]
847pub struct VideoDetails {
848 pub height: i64,
849 pub length: i64,
850 pub width: i64,
851}